11import { useEffect , useState } from 'react' ;
2+ import clsx from 'clsx' ;
23
34import useI18n from '@/hooks/useI18n' ;
45import { setCSS } from '@/utils/color' ;
@@ -11,19 +12,35 @@ import ColorPicker from '../ColorPicker';
1112import './index.scss' ;
1213
1314interface ToolPaletteProps {
15+ onSave : ( ) => void ;
16+ onEraser : ( isEraser : boolean ) => void ;
1417 onChange : ( key : string , value ?: any ) => void ;
1518}
1619
17- const ToolPalette : React . FC < ToolPaletteProps > = ( { onChange } ) => {
20+ const ToolPalette : React . FC < ToolPaletteProps > = ( {
21+ onChange,
22+ onSave,
23+ onEraser,
24+ } ) => {
1825 const t = useI18n ( [ 'common' ] ) ;
1926 const [ color , setColor ] = useState ( '#000000' ) ;
2027 const [ size , setSize ] = useState ( 1 ) ;
2128 const [ opacity , setOpacity ] = useState ( 100 ) ;
29+ const [ isEraser , setEraser ] = useState ( false ) ;
2230
2331 const handleChange = ( key : string , value ?: any ) => {
2432 onChange && onChange ( key , value ) ;
2533 } ;
2634
35+ const handleEraser = ( ) => {
36+ setEraser ( ! isEraser ) ;
37+ onEraser && onEraser ( ! isEraser ) ;
38+ } ;
39+
40+ const handleSave = ( ) => {
41+ onSave && onSave ( ) ;
42+ } ;
43+
2744 const handleColor = ( c : string ) => {
2845 setColor ( c ) ;
2946 handleChange ( 'color' , c ) ;
@@ -105,10 +122,13 @@ const ToolPalette: React.FC<ToolPaletteProps> = ({ onChange }) => {
105122 </ button >
106123 </ Popover >
107124 < div className = "omb-tool-line" />
108- < div className = "eraser-btn" onClick = { ( ) => handleChange ( 'eraser' ) } >
125+ < div
126+ className = { clsx ( 'eraser-btn' , { active : isEraser } ) }
127+ onClick = { handleEraser }
128+ >
109129 < EraserIcon />
110130 </ div >
111- < button onClick = { ( ) => handleChange ( 'save' ) } > save</ button >
131+ < button onClick = { handleSave } > save</ button >
112132 </ div >
113133 ) ;
114134} ;
0 commit comments