Skip to content

Commit bb1681b

Browse files
siddharthkpmperrotti
authored andcommitted
ThemeProvider: Fix theme sync with system settings (primer#2048)
* disable theme decorator for themeprovider story * remove incorrect effect * Create wicked-boats-allow.md Co-authored-by: Mike Perrotti <mperrotti@github.com>
1 parent efbf0cf commit bb1681b

File tree

4 files changed

+28
-8
lines changed

4 files changed

+28
-8
lines changed

.changeset/wicked-boats-allow.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@primer/react": patch
3+
---
4+
5+
ThemeProvider: Bug fix, in `colorMode=auto`, the theme now syncs with system changes.

.storybook/preview.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ export const globalTypes = {
7171

7272
// context.globals.X references items in globalTypes
7373
const withThemeProvider = (Story, context) => {
74+
// used for testing ThemeProvider.stories.tsx
75+
if (context.parameters.disableThemeDecorator) return <Story {...context} />
76+
7477
if (context.globals.colorMode === 'all') {
7578
return (
7679
<Wrapper>

src/ThemeProvider.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,6 @@ export const ThemeProvider: React.FC<ThemeProviderProps> = ({children, ...props}
101101
setColorMode(props.colorMode ?? fallbackColorMode ?? defaultColorMode)
102102
}, [props.colorMode, fallbackColorMode])
103103

104-
React.useEffect(() => {
105-
setColorMode(resolvedColorMode)
106-
}, [resolvedColorMode])
107-
108104
React.useEffect(() => {
109105
setDayScheme(props.dayScheme ?? fallbackDayScheme ?? defaultDayScheme)
110106
}, [props.dayScheme, fallbackDayScheme])

src/stories/ThemeProvider.stories.tsx

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {createGlobalStyle} from 'styled-components'
88
export default {
99
title: 'Generic behaviors/ThemeProvider',
1010
component: ThemeProvider,
11+
parameters: {disableThemeDecorator: true},
1112
argTypes: {
1213
theme: {
1314
table: {
@@ -97,8 +98,23 @@ export const Nested: Story<ThemeProviderProps> = args => {
9798
)
9899
}
99100

100-
Nested.args = {
101-
colorMode: 'day',
102-
dayScheme: 'light',
103-
nightScheme: 'dark_dimmed'
101+
const AutoContents = () => {
102+
const {colorMode, resolvedColorMode} = useTheme()
103+
104+
return (
105+
<Box sx={{padding: 10, backgroundColor: 'canvas.inset', color: 'fg.default'}}>
106+
colorMode: {colorMode} <br />
107+
resolvedColorMode: {resolvedColorMode} <br />
108+
</Box>
109+
)
110+
}
111+
112+
export const Auto = () => {
113+
return (
114+
<ThemeProvider colorMode="auto">
115+
<BaseStyles>
116+
<AutoContents />
117+
</BaseStyles>
118+
</ThemeProvider>
119+
)
104120
}

0 commit comments

Comments
 (0)