Skip to content

Commit cf980da

Browse files
committed
Fix: directory structure
1 parent 8bbe599 commit cf980da

File tree

13 files changed

+40
-55
lines changed

13 files changed

+40
-55
lines changed

.eslintrc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"react/prop-types": "off",
1818
"react/require-default-props": "off",
1919
"@typescript-eslint/no-use-before-define": "off",
20-
"import/prefer-default-export": "off"
20+
"import/prefer-default-export": "off",
21+
"react/jsx-props-no-spreading": "off"
2122
}
2223
}

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ typings/
8181
# Nuxt.js build / generate output
8282
.nuxt
8383
dist
84+
lib
8485

8586
# Gatsby files
8687
.cache/

__tests__/WeEditor.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ describe('component: WeEditor', () => {
1111
const ref = React.createRef<WeEditorRef>();
1212
render(<WeEditor ref={ref} />);
1313

14-
expect(ref.current?.getHTMLString()).toBe('');
14+
expect(ref.current?.getHTMLState()).toBe('');
1515
});
1616
});

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"version": "1.0.0",
44
"description": "light-weight, tagless and simple text editor!",
55
"main": "dist/index.js",
6+
"module": "lib/index.js",
67
"repository": {
78
"type": "git",
89
"url": "git+https://github.com/wecode-bootcamp/we-editor.git"

rollup.config.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ export default {
99
file: packageJSON.main,
1010
format: 'cjs',
1111
},
12+
{
13+
file: packageJSON.module,
14+
format: 'es',
15+
},
1216
],
1317
plugins: [
1418
typescript({ abortOnError: false, tsconfigOverride: { exclude: ['__tests__'] } }),
@@ -18,5 +22,5 @@ export default {
1822
summaryOnly: true,
1923
}),
2024
],
21-
external: ['react', '@emotion/styled', 'react-icons'],
25+
external: [...Object.keys(packageJSON.dependencies || {})],
2226
};

src/Toolbar.tsx

Lines changed: 0 additions & 19 deletions
This file was deleted.

src/Toolbar/Toolbar.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import * as React from 'react';
2+
3+
function Toolbar() {
4+
return <div>Toolbar</div>;
5+
}
6+
7+
export default Toolbar;

src/Toolbar/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import Toolbar from './Toolbar';
2+
3+
export default Toolbar;

src/WeEditor.tsx

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,43 @@
11
import * as React from 'react';
22

3-
export const WeEditor = React.forwardRef<WeEditorRef, WeEditorProps>(
4-
({ htmlString, setHTMLString, className, placeholder, autofocus, disabled, maxLength }, forwardedRef) => {
3+
const WeEditor = React.forwardRef<WeEditorRef, WeEditorProps>(
4+
({ htmlState, setHTMLState, ...divProps }, forwardedRef) => {
55
const containerRef = React.useRef<HTMLDivElement | null>(null);
6-
const { onInput } = useInput({ setHTMLString });
7-
8-
useSelection();
96

107
React.useImperativeHandle(forwardedRef, () => ({
11-
getHTMLString: () => containerRef.current && containerRef.current.innerHTML,
8+
getHTMLState: () => containerRef.current?.innerHTML,
129
}));
1310

14-
return <div contentEditable ref={containerRef} onInput={onInput} />;
11+
const { onInput } = useOnInputCallback({ setHTMLState });
12+
13+
return <div {...divProps} contentEditable ref={containerRef} onInput={onInput} />;
1514
}
1615
);
1716

17+
export default WeEditor;
18+
1819
export interface WeEditorRef {
19-
getHTMLString: () => string | null;
20+
getHTMLState: () => string | undefined;
2021
}
2122

22-
export interface WeEditorProps {
23-
htmlString?: string;
24-
setHTMLString?: React.Dispatch<React.SetStateAction<string>>;
25-
className?: string;
26-
placeholder?: string;
27-
autofocus?: boolean;
28-
disabled?: boolean;
29-
maxLength?: number;
23+
export interface WeEditorProps extends React.HTMLAttributes<HTMLDivElement> {
24+
htmlState?: string;
25+
setHTMLState?: React.Dispatch<React.SetStateAction<string>>;
3026
}
3127

32-
interface UseInputProps {
33-
setHTMLString?: React.Dispatch<React.SetStateAction<string>>;
34-
}
35-
function useInput({ setHTMLString }: UseInputProps) {
28+
function useOnInputCallback({ setHTMLState }: UseOnInputProps) {
3629
const onInput = React.useCallback(
3730
(event: React.FormEvent<HTMLDivElement>) => {
38-
if (setHTMLString) {
39-
setHTMLString(event.currentTarget.innerHTML);
31+
if (setHTMLState) {
32+
setHTMLState(event.currentTarget.innerHTML);
4033
}
4134
},
42-
[setHTMLString]
35+
[setHTMLState]
4336
);
4437

4538
return { onInput };
4639
}
4740

48-
function useSelection() {
49-
React.useEffect(() => {
50-
const selectCB = () => {};
51-
document.addEventListener('select', selectCB);
52-
return () => {
53-
document.removeEventListener('select', selectCB);
54-
};
55-
}, []);
41+
interface UseOnInputProps {
42+
setHTMLState?: React.Dispatch<React.SetStateAction<string>>;
5643
}
File renamed without changes.

0 commit comments

Comments
 (0)