From 84a1863233753294b6254d444a8d04e1780a2585 Mon Sep 17 00:00:00 2001 From: Jeremy Press Date: Mon, 15 Mar 2021 11:33:46 -0700 Subject: [PATCH] feat: Add theme prop (#3228) * support appearance when updating scene data * works! * whoops, missed a prop * hide appearance button when prop is not set * cleanup * fix export + rename prop to theme * rename to showThemeBtn, hide via react instead of css * adapt to new state name * add tests and css selector to target the dark mode toggle * updated changelog and readme * fix markdown rendering in readme * pr feedback --- src/components/App.tsx | 13 ++++++++++++ .../BackgroundPickerAndDarkModeToggle.tsx | 20 +++++++++++-------- src/components/DarkModeToggle.tsx | 3 ++- src/components/LayerUI.tsx | 4 ++++ src/components/MobileMenu.tsx | 3 +++ src/packages/excalidraw/CHANGELOG.md | 1 + src/packages/excalidraw/README.md | 5 +++++ src/packages/excalidraw/index.tsx | 2 ++ src/tests/excalidrawPackage.test.tsx | 20 ++++++++++++++++++- src/types.ts | 1 + 10 files changed, 62 insertions(+), 10 deletions(-) diff --git a/src/components/App.tsx b/src/components/App.tsx index 024adb8277..392e7059cb 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -303,9 +303,11 @@ class App extends React.Component { viewModeEnabled = false, zenModeEnabled = false, gridModeEnabled = false, + theme = defaultAppState.theme, } = props; this.state = { ...defaultAppState, + theme, isLoading: true, width, height, @@ -458,6 +460,7 @@ class App extends React.Component { showExitZenModeBtn={ typeof this.props?.zenModeEnabled === "undefined" && zenModeEnabled } + showThemeBtn={typeof this.props?.theme === "undefined"} libraryReturnUrl={this.props.libraryReturnUrl} />
@@ -519,6 +522,7 @@ class App extends React.Component { let viewModeEnabled = actionResult?.appState?.viewModeEnabled || false; let zenModeEnabled = actionResult?.appState?.zenModeEnabled || false; let gridSize = actionResult?.appState?.gridSize || null; + let theme = actionResult?.appState?.theme || "light"; if (typeof this.props.viewModeEnabled !== "undefined") { viewModeEnabled = this.props.viewModeEnabled; @@ -532,6 +536,10 @@ class App extends React.Component { gridSize = this.props.gridModeEnabled ? GRID_SIZE : null; } + if (typeof this.props.theme !== "undefined") { + theme = this.props.theme; + } + this.setState( (state) => { // using Object.assign instead of spread to fool TS 4.2.2+ into @@ -547,6 +555,7 @@ class App extends React.Component { viewModeEnabled, zenModeEnabled, gridSize, + theme, }); }, () => { @@ -882,6 +891,10 @@ class App extends React.Component { this.setState({ zenModeEnabled: !!this.props.zenModeEnabled }); } + if (prevProps.theme !== this.props.theme && this.props.theme) { + this.setState({ theme: this.props.theme }); + } + if (prevProps.gridModeEnabled !== this.props.gridModeEnabled) { this.setState({ gridSize: this.props.gridModeEnabled ? GRID_SIZE : null, diff --git a/src/components/BackgroundPickerAndDarkModeToggle.tsx b/src/components/BackgroundPickerAndDarkModeToggle.tsx index 3fb03a70e5..a5e0e66843 100644 --- a/src/components/BackgroundPickerAndDarkModeToggle.tsx +++ b/src/components/BackgroundPickerAndDarkModeToggle.tsx @@ -7,20 +7,24 @@ export const BackgroundPickerAndDarkModeToggle = ({ appState, setAppState, actionManager, + showThemeBtn, }: { actionManager: ActionManager; appState: AppState; setAppState: React.Component["setState"]; + showThemeBtn: boolean; }) => (
{actionManager.renderAction("changeViewBackgroundColor")} -
- { - setAppState({ theme }); - }} - /> -
+ {showThemeBtn && ( +
+ { + setAppState({ theme }); + }} + /> +
+ )}
); diff --git a/src/components/DarkModeToggle.tsx b/src/components/DarkModeToggle.tsx index 06d02a6454..bb649870ca 100644 --- a/src/components/DarkModeToggle.tsx +++ b/src/components/DarkModeToggle.tsx @@ -20,7 +20,8 @@ export const DarkModeToggle = (props: { return (