From 357698143a817ee36eca5ac27275e46cbc317eb0 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 26 Aug 2022 08:08:16 -0400 Subject: [PATCH] added medium-editor to the new blogs page --- package-lock.json | 45 ++++++++++++++++++++++ package.json | 1 + src/components/MediumEditor.jsx | 15 ++++++++ src/components/NewBlog.tsx | 26 +++++-------- src/styles/_common.scss | 2 +- src/styles/app.scss | 1 + src/styles/components/_blog_component.scss | 14 +++++++ src/styles/components/_medium_editor.scss | 16 ++++++++ src/styles/components/_new_blog_page.scss | 13 ++++++- 9 files changed, 115 insertions(+), 18 deletions(-) create mode 100644 src/components/MediumEditor.jsx create mode 100644 src/styles/components/_medium_editor.scss diff --git a/package-lock.json b/package-lock.json index 7c8785a..562646f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,6 +36,7 @@ "react-draft-wysiwyg": "^1.15.0", "react-error-overlay": "^6.0.11", "react-icons": "^4.4.0", + "react-medium-editor": "^1.8.1", "react-notifications": "^1.7.4", "react-redux": "^8.0.2", "react-router-dom": "^6.3.0", @@ -6673,6 +6674,11 @@ "ieee754": "^1.2.1" } }, + "node_modules/blacklist": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/blacklist/-/blacklist-1.1.4.tgz", + "integrity": "sha512-DWdfwimA1WQxVC69Vs1Fy525NbYwisMSCdYQmW9zyzOByz9OB/tQwrKZ3T3pbTkuFjnkJFlJuyiDjPiXL5kzew==" + }, "node_modules/blakejs": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", @@ -15799,6 +15805,11 @@ "node": ">= 0.6" } }, + "node_modules/medium-editor": { + "version": "5.23.3", + "resolved": "https://registry.npmjs.org/medium-editor/-/medium-editor-5.23.3.tgz", + "integrity": "sha512-he9/TdjX8f8MGdXGfCs8AllrYnqXJJvjNkDKmPg3aPW/uoIrlRqtkFthrwvmd+u4QyzEiadhCCM0EwTiRdUCJw==" + }, "node_modules/memdown": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", @@ -18997,6 +19008,20 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, + "node_modules/react-medium-editor": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/react-medium-editor/-/react-medium-editor-1.8.1.tgz", + "integrity": "sha512-p1t9Y0J8pf8U8JUN0ZyKVoyae5f3a1cetDnAdrSbKAD2Zn6+qxJQrquNvpiANeDul0j8PYW7+u/xAfme4tNsEg==", + "dependencies": { + "blacklist": "^1.1.2", + "medium-editor": "^5.10.0", + "object-assign": "^4.0.1" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0", + "react-dom": "^0.14.0 || ^15.0.0" + } + }, "node_modules/react-native-fetch-api": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-2.0.0.tgz", @@ -28348,6 +28373,11 @@ } } }, + "blacklist": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/blacklist/-/blacklist-1.1.4.tgz", + "integrity": "sha512-DWdfwimA1WQxVC69Vs1Fy525NbYwisMSCdYQmW9zyzOByz9OB/tQwrKZ3T3pbTkuFjnkJFlJuyiDjPiXL5kzew==" + }, "blakejs": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", @@ -35353,6 +35383,11 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, + "medium-editor": { + "version": "5.23.3", + "resolved": "https://registry.npmjs.org/medium-editor/-/medium-editor-5.23.3.tgz", + "integrity": "sha512-he9/TdjX8f8MGdXGfCs8AllrYnqXJJvjNkDKmPg3aPW/uoIrlRqtkFthrwvmd+u4QyzEiadhCCM0EwTiRdUCJw==" + }, "memdown": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", @@ -37550,6 +37585,16 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, + "react-medium-editor": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/react-medium-editor/-/react-medium-editor-1.8.1.tgz", + "integrity": "sha512-p1t9Y0J8pf8U8JUN0ZyKVoyae5f3a1cetDnAdrSbKAD2Zn6+qxJQrquNvpiANeDul0j8PYW7+u/xAfme4tNsEg==", + "requires": { + "blacklist": "^1.1.2", + "medium-editor": "^5.10.0", + "object-assign": "^4.0.1" + } + }, "react-native-fetch-api": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-2.0.0.tgz", diff --git a/package.json b/package.json index a9025e6..41bc382 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "react-draft-wysiwyg": "^1.15.0", "react-error-overlay": "^6.0.11", "react-icons": "^4.4.0", + "react-medium-editor": "^1.8.1", "react-notifications": "^1.7.4", "react-redux": "^8.0.2", "react-router-dom": "^6.3.0", diff --git a/src/components/MediumEditor.jsx b/src/components/MediumEditor.jsx new file mode 100644 index 0000000..c01ce70 --- /dev/null +++ b/src/components/MediumEditor.jsx @@ -0,0 +1,15 @@ + +// load theme styles with webpack +import 'medium-editor/dist/css/medium-editor.css'; +import 'medium-editor/dist/css/themes/beagle.css'; + +// ES module +import Editor from 'react-medium-editor'; + +const MediumEditor = (props) => { + return ( + + ); +}; + +export default MediumEditor; diff --git a/src/components/NewBlog.tsx b/src/components/NewBlog.tsx index 801851d..012881f 100644 --- a/src/components/NewBlog.tsx +++ b/src/components/NewBlog.tsx @@ -7,6 +7,7 @@ import { NotificationManager } from "./Notification"; import { v4 as uuidv4 } from "uuid"; import { useNavigate } from "react-router-dom"; import { setLoading } from "slices/viewState"; +import MediumEditor from "./MediumEditor"; interface INewBlog {} @@ -42,35 +43,28 @@ const NewBlog = (props: INewBlog) => { // handle result here NotificationManager.success(`"${blog.Title}" Created`, "Blog Created"); navigate("/main"); - console.log({blog}); + console.log({ blog }); dispatch(setLoading(false)); }) .catch((rejectedValueOrSerializedError) => { // handle error here - console.log({rejectedValueOrSerializedError}); + console.log({ rejectedValueOrSerializedError }); dispatch(setLoading(false)); }); }; return (
- setTitle(e.target.value)} value={title} /> - setBody(e.target.value)} - value={body} +

"} + onChange={(text: any, medium: any) => { setBody(text); console.log({text, medium})}} />