mirror of
https://github.com/plausible/analytics.git
synced 2024-12-19 23:52:26 +03:00
425975efec
* Adds New Dark Mode Assets * Moves triangle for dropdown to a reasonable position * Majority .eex dark implementation * Fixes Logo Positioning * Adds theme flag to user schema, uses it * Uses correct variables for theme applicator script * Minor missed theme changes/fallbacks * Individual Component Support + Theme Context * Sources Tab Support This was a pain to test D: * Partial Stats Sections Support * More of stats modules supported * Modal +table support * Improves some Flatpickr in light theme, supports dark theme * Fixes missed settings tab colors * Finishes Devices module support * Fixes bar graph colors * Better colorizes maps module * Undoes colorized bars (they looked bad, on second thought) * Fixes loading indicator * Finishes conversions module * Adds changelog entry The PR number could be wrong, will double check * Fixes missed header color * Fixes naming of migration and removes static alter * Does migration correctly As I said, my Elixir is pretty weak heh * Adds support for spike notifications setting * Improves contrast and visibility for email settings * Resolves @ukutaht's comments on #467 * Fixes missing dark style * Found one more missed dark element (shared links) * Formatting fixes
38 lines
1017 B
JavaScript
38 lines
1017 B
JavaScript
import React from 'react';
|
|
import { ThemeContext } from './theme-context'
|
|
|
|
export const withThemeProvider = (WrappedComponent) => {
|
|
return class extends React.Component {
|
|
constructor(props) {
|
|
super(props)
|
|
this.state = {
|
|
dark: document.querySelector('html').classList.contains('dark') || false
|
|
};
|
|
|
|
this.mutationObserver = new MutationObserver((mutationsList, observer) => {
|
|
mutationsList.forEach(mutation => {
|
|
if (mutation.attributeName === 'class') {
|
|
this.setState({ dark: mutation.target.classList.contains('dark') });
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
componentDidMount() {
|
|
this.mutationObserver.observe(document.querySelector('html'), { attributes: true });
|
|
}
|
|
|
|
componentWillUnmount() {
|
|
this.mutationObserver.disconnect();
|
|
}
|
|
|
|
render() {
|
|
return (
|
|
<ThemeContext.Provider value={this.state.dark}>
|
|
<WrappedComponent {...this.props}/>
|
|
</ThemeContext.Provider>
|
|
);
|
|
}
|
|
}
|
|
}
|