Skip to content
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

fix(rich-text-editor): fix dark mode ui appearance #696

Merged
merged 13 commits into from
Jun 29, 2022
77 changes: 45 additions & 32 deletions src/components/RichTextEditor.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useState } from "react";
import { lazy, Suspense, useState } from "react";

import { styled, useTheme } from "@mui/material";
import { Editor } from "@tinymce/tinymce-react";
Expand All @@ -9,8 +9,6 @@ import "tinymce/tinymce.min.js";
import "tinymce/themes/silver";
// Toolbar icons
import "tinymce/icons/default";
// Editor styles
import "tinymce/skins/ui/oxide/skin.min.css";
// Content styles, including inline UI like fake cursors
/* eslint import/no-webpack-loader-syntax: off */
import contentCss from "!!raw-loader!tinymce/skins/content/default/content.min.css";
Expand All @@ -27,6 +25,14 @@ import "tinymce/plugins/paste";
import "tinymce/plugins/help";
import "tinymce/plugins/code";

// Editor styles
const RichTextEditorDarkCSS = lazy(
() => import("@src/theme/RichTextEditorDarkCSS")
);
const RichTextEditorLightCSS = lazy(
() => import("@src/theme/RichTextEditorLightCSS")
);

const Styles = styled("div", {
shouldForwardProp: (prop) => prop !== "focus",
})<{ focus?: boolean; disabled?: boolean }>(({ theme, focus, disabled }) => ({
Expand Down Expand Up @@ -118,15 +124,21 @@ export default function RichTextEditor({

return (
<Styles focus={focus} disabled={disabled}>
<Editor
disabled={disabled}
init={{
skin: false,
content_css: false,
content_style: [
theme.palette.mode === "dark" ? contentCssDark : contentCss,
theme.palette.mode === "dark" ? contentUiCssDark : contentUiCss,
`
<Suspense fallback={<></>}>
{theme.palette.mode === "dark" ? (
<RichTextEditorDarkCSS />
) : (
<RichTextEditorLightCSS />
)}
<Editor
disabled={disabled}
init={{
skin: false,
content_css: false,
content_style: [
theme.palette.mode === "dark" ? contentCssDark : contentCss,
theme.palette.mode === "dark" ? contentUiCssDark : contentUiCss,
`
:root {
font-size: 14px;
-webkit-font-smoothing: antialiased;
Expand All @@ -145,26 +157,27 @@ export default function RichTextEditor({
body :first-child { margin-top: 0; }
a { color: ${theme.palette.primary.main}; }
`,
].join("\n"),
minHeight: 300,
menubar: false,
plugins: ["autoresize", "lists link image", "paste help", "code"],
statusbar: false,
toolbar:
"formatselect | bold italic forecolor | link | bullist numlist outdent indent | removeformat code | help",
body_id: id,
}}
value={value}
onEditorChange={onChange}
onFocus={() => {
setFocus(true);
if (onFocus) onFocus();
}}
onBlur={() => {
setFocus(false);
if (onBlur) onBlur();
}}
/>
].join("\n"),
minHeight: 300,
menubar: false,
plugins: ["autoresize", "lists link image", "paste help", "code"],
statusbar: false,
toolbar:
"formatselect | bold italic forecolor | link | bullist numlist outdent indent | removeformat code | help",
body_id: id,
}}
value={value}
onEditorChange={onChange}
onFocus={() => {
setFocus(true);
if (onFocus) onFocus();
}}
onBlur={() => {
setFocus(false);
if (onBlur) onBlur();
}}
/>
</Suspense>
</Styles>
);
}
5 changes: 5 additions & 0 deletions src/theme/RichTextEditorDarkCSS.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import "tinymce/skins/ui/oxide-dark/skin.min.css";

export default function RichTextEditorDarkCSS() {
return null;
}
5 changes: 5 additions & 0 deletions src/theme/RichTextEditorLightCSS.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import "tinymce/skins/ui/oxide/skin.min.css";

export default function RichTextEditorLightCSS() {
return null;
}