Skip to content

Commit 55ed6cb

Browse files
authored
Assorted refactor and cleanup (#106)
* merge storage context into themecontext * TokenManager -> api util * reduce themecontext * lowercase util files * dead code * remove Contexts
1 parent 5b828ef commit 55ed6cb

23 files changed

+33
-254
lines changed

src/App.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { NavBar } from './views/Navigation/NavBar'
22
import { useColorScheme } from '@mui/joy'
33
import { Outlet } from 'react-router-dom'
44
import { UserContext } from './contexts/UserContext'
5-
import { isTokenValid } from './utils/TokenManager'
5+
import { isTokenValid } from './utils/api'
66
import React from 'react'
77
import { ThemeMode } from './constants/theme'
88
import { GetUserProfile } from './api/users'

src/api/auth.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Request } from '../utils/TokenManager'
1+
import { Request } from '../utils/api'
22

33
type TokenResponse = {
44
token: string

src/api/labels.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Label } from '@/models/label'
2-
import { Request } from '../utils/TokenManager'
2+
import { Request } from '../utils/api'
33

44
type LabelsResponse = {
55
labels: Label[]

src/api/tasks.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Task } from '@/models/task'
2-
import { Request } from '../utils/TokenManager'
2+
import { Request } from '../utils/api'
33
import { HistoryEntry } from '@/models/history'
44
import { Label } from '@/models/label'
55

src/api/users.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { APIToken } from '@/models/token'
2-
import { Request } from '../utils/TokenManager'
2+
import { Request } from '../utils/api'
33
import { User } from '@/models/user'
44
import { NotificationTriggerOptions, NotificationType } from '@/models/notifications'
55

src/contexts/Contexts.tsx

-16
This file was deleted.

src/contexts/StorageContext.tsx

-47
This file was deleted.

src/contexts/ThemeContext.tsx

+11-83
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,17 @@
1-
// import { COLORS } from '@/utils/Colors'
2-
import { CssBaseline } from '@mui/joy'
3-
import { CssVarsProvider, extendTheme } from '@mui/joy/styles'
1+
import { ThemeMode } from '@/constants/theme'
2+
import { retrieveValue, storeValue } from '@/utils/storage'
43
import React from 'react'
54

6-
// const primaryColor = 'cyan'
7-
8-
// const shades = [
9-
// '50',
10-
// ...Array.from({ length: 9 }, (_, i) => String((i + 1) * 100)),
11-
// ]
12-
13-
// TODO: Theming
14-
// const getPallete = (key = primaryColor) => {
15-
// return shades.reduce((acc: any, shade) => {
16-
// acc[shade] = COLORS[key][shade]
17-
// return acc
18-
// }, {})
19-
// }
5+
export type ThemeContextState = {
6+
themeMode: ThemeMode
7+
setThemeMode: (themeMode: ThemeMode) => void
8+
}
209

21-
// const primaryPalette = getPallete(primaryColor)
10+
const initialThemeMode = retrieveValue<ThemeMode>('themeMode', 'system')
2211

23-
const theme = extendTheme({
24-
colorSchemes: {
25-
light: {
26-
palette: {
27-
// TODO: theming
28-
// primary: primaryPalette,
29-
success: {
30-
50: '#f3faf7',
31-
100: '#def5eb',
32-
200: '#b7e7d5',
33-
300: '#8ed9be',
34-
400: '#6ecdb0',
35-
500: '#4ec1a2',
36-
600: '#46b89a',
37-
700: '#3cae91',
38-
800: '#32a487',
39-
900: '#229d76',
40-
},
41-
danger: {
42-
50: '#fef2f2',
43-
100: '#fde8e8',
44-
200: '#fbd5d5',
45-
300: '#f9c1c1',
46-
400: '#f6a8a8',
47-
500: '',
48-
600: '#f47272',
49-
700: '#e33434',
50-
800: '#cc1f1a',
51-
900: '#b91c1c',
52-
},
53-
warning: {
54-
50: '#fffdf7',
55-
100: '#fef8e1',
56-
200: '#fdecb2',
57-
300: '#fcd982',
58-
400: '#fbcf52',
59-
500: '#f9c222',
60-
600: '#f6b81e',
61-
700: '#f3ae1a',
62-
800: '#f0a416',
63-
900: '#e99b0e',
64-
},
65-
},
66-
},
67-
// TODO: Theming
68-
// dark: {
69-
// palette: {
70-
// primary: primaryPalette,
71-
// },
72-
// },
12+
export const ThemeContext = React.createContext<ThemeContextState>({
13+
themeMode: initialThemeMode,
14+
setThemeMode: (themeMode: ThemeMode) => {
15+
storeValue('themeMode', themeMode)
7316
},
7417
})
75-
76-
interface ThemeContextProps {
77-
children: React.ReactNode
78-
}
79-
80-
export class ThemeContext extends React.Component<ThemeContextProps> {
81-
render() {
82-
return (
83-
<CssVarsProvider theme={theme}>
84-
<CssBaseline />
85-
{this.props.children}
86-
</CssVarsProvider>
87-
)
88-
}
89-
}

src/main.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import React from 'react'
22
import ReactDOM from 'react-dom/client'
3-
import { Contexts } from './contexts/Contexts'
43
import { useRoot } from './utils/dom'
4+
import { RouterContext } from './contexts/RouterContext'
55

66
ReactDOM.createRoot(useRoot()).render(
77
<React.StrictMode>
8-
<Contexts />
8+
<RouterContext />
99
</React.StrictMode>,
1010
)
File renamed without changes.
File renamed without changes.

src/utils/labels.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { LABEL_COLORS } from "./Colors"
1+
import { LABEL_COLORS } from "./colors"
22

33
export type ColorOption = {
44
name: string
File renamed without changes.

src/utils/tasks.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Task } from '@/models/task'
2-
import { COLORS, TASK_COLOR } from './Colors'
2+
import { COLORS, TASK_COLOR } from './colors'
33
import moment from 'moment'
44
import { Label } from '@/models/label'
55
import { DueDateGroups, GROUP_BY, LabelGroups } from '@/utils/grouping'

src/views/Labels/LabelView.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { DeleteLabel, GetLabels } from '@/api/labels'
22
import { Label } from '@/models/label'
3-
import { getTextColorFromBackgroundColor } from '@/utils/Colors'
3+
import { getTextColorFromBackgroundColor } from '@/utils/colors'
44
import { Add } from '@mui/icons-material'
55
import {
66
Box,

src/views/Modals/Inputs/LabelModal.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { UpdateLabel, CreateLabel } from '@/api/labels'
22
import { Label } from '@/models/label'
3-
import { LABEL_COLORS } from '@/utils/Colors'
3+
import { LABEL_COLORS } from '@/utils/colors'
44
import { ModalDialog } from '@mui/joy'
55
import {
66
Modal,

src/views/Navigation/NavBar.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { getNextThemeMode } from '@/constants/theme'
2-
import { StorageContext, StorageContextState } from '@/contexts/StorageContext'
32
import {
43
MenuRounded,
54
HomeOutlined,
@@ -22,6 +21,7 @@ import { ThemeToggleButton } from '../Settings/ThemeToggleButton'
2221
import { NavBarLink } from './NavBarLink'
2322
import { getPathName, NavigationPaths, WithNavigate } from '@/utils/navigation'
2423
import { Logo } from '@/Logo'
24+
import { ThemeContext, ThemeContextState } from '@/contexts/ThemeContext'
2525

2626
type NavBarProps = WithNavigate
2727

@@ -91,8 +91,8 @@ export class NavBar extends React.Component<NavBarProps, NavBarState> {
9191
fontSize: 24,
9292
}}
9393
/>
94-
<StorageContext.Consumer>
95-
{({ themeMode, setThemeMode }: StorageContextState) => (
94+
<ThemeContext.Consumer>
95+
{({themeMode, setThemeMode}: ThemeContextState) => (
9696
<ThemeToggleButton
9797
themeMode={themeMode}
9898
onThemeModeToggle={() => setThemeMode(getNextThemeMode(themeMode))}
@@ -102,7 +102,7 @@ export class NavBar extends React.Component<NavBarProps, NavBarState> {
102102
}}
103103
/>
104104
)}
105-
</StorageContext.Consumer>
105+
</ThemeContext.Consumer>
106106
</Box>
107107
<Drawer
108108
open={this.state.drawerOpen}

src/views/Settings/Settings.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { UpdatePassword } from '@/api/users'
2-
import { StorageContext } from '@/contexts/StorageContext'
32
import { Container, Typography, Divider, Box, Button } from '@mui/joy'
43
import React from 'react'
54
import { PassowrdChangeModal } from '../Modals/Inputs/PasswordChangeModal'
65
import { APITokenSettings } from './APITokenSettings'
76
import { NotificationSetting } from '../Notifications/NotificationSettings'
87
import { ThemeToggle } from './ThemeToggle'
8+
import { ThemeContext } from '@/contexts/ThemeContext'
99

1010
export class Settings extends React.Component {
1111
private changePasswordModal = React.createRef<PassowrdChangeModal>()
@@ -60,14 +60,14 @@ export class Settings extends React.Component {
6060
<Typography level='h3'>Theme preferences</Typography>
6161
<Divider />
6262

63-
<StorageContext.Consumer>
63+
<ThemeContext.Consumer>
6464
{storedState => (
6565
<ThemeToggle
6666
themeMode={storedState.themeMode}
6767
onThemeModeToggle={storedState.setThemeMode}
6868
/>
6969
)}
70-
</StorageContext.Consumer>
70+
</ThemeContext.Consumer>
7171
</Box>
7272
</Container>
7373
)

src/views/Tasks/IconButtonWithMenu.tsx

-86
This file was deleted.

0 commit comments

Comments
 (0)