Skip to content

Commit

Permalink
add color picker
Browse files Browse the repository at this point in the history
  • Loading branch information
y-moroz committed May 10, 2020
1 parent ba61105 commit fa588fe
Show file tree
Hide file tree
Showing 6 changed files with 176 additions and 22 deletions.
122 changes: 101 additions & 21 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"ramda": "^0.27.0",
"react": "^16.2.0",
"react-async-hook": "^3.6.1",
"react-color": "^2.18.1",
"react-dom": "^16.2.0",
"react-icons": "^3.10.0",
"react-scripts": "1.1.1",
Expand Down
22 changes: 22 additions & 0 deletions src/text-editor/plugins/color-picker/ColorPicker.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
.color-picker {
position: relative;
display: inline-block;
}

.color-picker__button {
background-color: transparent;
border: none;
padding: 5px 5px;
}

.color-picker__button:hover {
background-color: lightgrey;
}

.color-picker__content {
position: absolute;
top: 35px;
left: -8px;
z-index: 2;
}

44 changes: 44 additions & 0 deletions src/text-editor/plugins/color-picker/ColorPicker.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import React, { useContext, useEffect, useState } from 'react';
import { GithubPicker } from 'react-color';
import { FaPalette } from 'react-icons/fa';
import './ColorPicker.css';
import { EditorSelectionContext } from '../../TextEditor';
import useConstant from 'use-constant';

function ColorPicker() {
const [opened, setOpened] = useState(false);
const [color, setColor] = useState(null);
const editorSelectionContext = useContext(EditorSelectionContext);

const selectionChangeListener = useConstant(() => () => setColor(document.queryCommandValue('foreColor')));

useEffect(
() => editorSelectionContext.registerSelectionChangeListener(selectionChangeListener),
[]
);

const onColorSelected = (color) => {
document.execCommand('styleWithCSS', true);
document.execCommand('foreColor', true, color.hex);
document.execCommand('styleWithCSS', false);
setOpened(false);
}
return (
<div className="color-picker">
<button
type="button"
className="color-picker__button"
onClick={() => setOpened(!opened)}
>
<FaPalette color={color}/>
</button>
{opened && (
<div className="color-picker__content" onMouseDown={e => e.preventDefault()}>
<GithubPicker onChangeComplete={onColorSelected}/>
</div>
)}
</div>
);
}

export default ColorPicker;
5 changes: 5 additions & 0 deletions src/text-editor/plugins/color-picker/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import ColorPicker from './ColorPicker';

export const COLOR_PICKER_PLUGIN_CONFIG = [{
component: ColorPicker
}];
4 changes: 3 additions & 1 deletion src/text-editor/plugins/index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { SIMPLE_ACTION_PLUGIN_CONFIG } from './simple-action';
import { SYNONYMS_ACTION_PLUGIN_CONFIG } from './synonyms';
import { COLOR_PICKER_PLUGIN_CONFIG } from './color-picker';

const PLUGINS = [
...SIMPLE_ACTION_PLUGIN_CONFIG,
...SYNONYMS_ACTION_PLUGIN_CONFIG
...SYNONYMS_ACTION_PLUGIN_CONFIG,
...COLOR_PICKER_PLUGIN_CONFIG
];

export default PLUGINS;

0 comments on commit fa588fe

Please sign in to comment.