diff --git a/package-lock.json b/package-lock.json index 0c9b607..d00c86a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "reactjs-editor", - "version": "1.0.6", + "version": "10.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "reactjs-editor", - "version": "1.0.6", + "version": "10.0.1", "license": "MIT", "devDependencies": { "@babel/core": "^7.12.10", diff --git a/src/components/floatingToolBar.js b/src/components/floatingToolBar.js index dac769a..c300662 100644 --- a/src/components/floatingToolBar.js +++ b/src/components/floatingToolBar.js @@ -6,47 +6,87 @@ import useUpdateDom from "../customHooks/useUpdateDom"; export default function FloatingToolBar({ x, y }) { const [open, setOpen] = useState(true); - const changeType = useEditor(state=>state.changeType) - const {addBold} = useUpdateDom() + const changeType = useEditor(state => state.changeType) + const { addBold, addItalic, addUnderline } = useUpdateDom() const closeMenu = () => setOpen(!open); - const toggleModal = useModal(state=>state.toggleModal) - const toggleCommentModal = useCommentModal(state=>state.toggleCommentModal) + const toggleModal = useModal(state => state.toggleModal) + const toggleCommentModal = useCommentModal(state => state.toggleCommentModal) const type = useEditor((state) => state.type); const config = useEditor((state) => state.config); - const openModal = ({name,value}) => { + const openModal = ({ name, value }) => { - changeType({name,value}) - if(name === 'bold') return; - if(name === 'comment'){ + changeType({ name, value }) + if (name === 'bold') return; + if (name === 'italic') return; + if (name === 'underline') return; + if (name === 'comment') { toggleCommentModal() } - else{ + else { toggleModal() } } -useEffect(()=>{ -if(type.name === 'bold' && config.selectedText){ - addBold(); -} -},[type.name,addBold]) useEffect(() => { - setOpen(true); + if (type.name === 'bold' && config.selectedText) { + addBold(); + } + if (type.name === 'italic' && config.selectedText) { + addItalic(); + } + if (type.name === 'underline' && config.selectedText) { + addUnderline(); + } + }, [type.name, addBold, addItalic, addUnderline]) + useEffect(() => { + setOpen(true); }, [x]); return ( <> {open && config.selectedText && x ? (
- openModal({name:'bold'})} >B - openModal({name:'highlight'})}> + openModal({ name: 'bold' })} > + + + + + openModal({ name: 'italic' })}> + + + + + openModal({ name: 'underline' })}> + + + + + openModal({ name: 'highlight' })}> - openModal({name:'comment'})} > + openModal({ name: 'comment' })} > { - if(index === elements.length-1){ - Childrens.push(element) + elements.forEach((element, index) => { + if (index === elements.length - 1) { + Childrens.push(element) } - else{ - Childrens.push(element) - Childrens.push( { - type: "span", - props: { - children: - type.name === "comment" - ? [ - config.selectedText, - { - type: "span", - props: { - className: "hover-card", - children: [ - { - type: "span", - props: { - className: "hover-title", - children: [config.selectedText], - }, - }, - type.value, - ], - }, - }, - ] - : [config.selectedText], - className: `text-shadow-reed ${type.name} ${ - type.value ? type.value : "" - } `, - }, - },) + else { + Childrens.push(element) + Childrens.push({ + type: "span", + props: { + children: + type.name === "comment" + ? [ + config.selectedText, + { + type: "span", + props: { + className: "hover-card", + children: [ + { + type: "span", + props: { + className: "hover-title", + children: [config.selectedText], + }, + }, + type.value, + ], + }, + }, + ] + : [config.selectedText], + className: `text-shadow-reed ${type.name} ${type.value ? type.value : "" + } `, + }, + },) } - - }) + + }) let child = { type: "span", props: { @@ -99,7 +98,7 @@ export default function useUpdateDom() { config.selectedText && config.xPath ) { - + let updatedDom = updateDom(dom, ""); const newDom = Object.create(updatedDom); setDom(newDom); @@ -118,6 +117,25 @@ export default function useUpdateDom() { changeType({ name: "", value: "" }); } }; + + const addItalic = () => { + if (type.name === "italic" && config.selectedText && config.xPath) { + let updatedDom = updateDom(dom, ""); + const newDom = Object.create(updatedDom); + setDom(newDom); + changeConfig({ xPath: "", selectedText: "" }); + changeType({ name: "", value: "" }); + } + }; + const addUnderline = () => { + if (type.name === "underline" && config.selectedText && config.xPath) { + let updatedDom = updateDom(dom, ""); + const newDom = Object.create(updatedDom); + setDom(newDom); + changeConfig({ xPath: "", selectedText: "" }); + changeType({ name: "", value: "" }); + } + }; const addComment = () => { if (type.name === "comment" && config.selectedText && config.xPath) { let updatedDom = updateDom(dom, ""); @@ -130,6 +148,8 @@ export default function useUpdateDom() { return { addBold, + addItalic, + addUnderline, addComment, addHighlight, }; diff --git a/src/style.css b/src/style.css index efa9b94..fc0880d 100644 --- a/src/style.css +++ b/src/style.css @@ -37,6 +37,10 @@ position: relative; transition: all .2s ease-in-out; color:#000; + border-right: 1px solid rgb(83, 82, 82); +} +.floating-toolbar span:last-child { + border-right: none; } .floating-toolbar span:hover { background: #f2f2f2; @@ -205,6 +209,12 @@ font-weight: bold; letter-spacing: 1; } +.italic { + font-style: italic; +} +.underline{ + text-decoration: underline; +} .highlight { border-radius: 4px; padding: 4px;