Skip to content

Commit 26bba1b

Browse files
committed
v1.1.0
1 parent a81cbcb commit 26bba1b

File tree

4 files changed

+89
-13
lines changed

4 files changed

+89
-13
lines changed

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
## Changelog
2+
3+
### v1.0.0
4+
5+
* First stable release
6+
7+
props: initColor, onReset, onSubmit, resetLabel, style, submitLabel
8+
9+
### v1.1.0
10+
11+
* Added props: onSelect, onHover

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-material-color-picker",
3-
"version": "1.0.6",
3+
"version": "1.1.0",
44
"description": "React Material Color Picker Component",
55
"repository": {
66
"type": "git",

src/MaterialColorPicker.jsx

Lines changed: 64 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ const _colors = require('./colors');
66
const propTypes = {
77
initColor: React.PropTypes.string,
88
onSubmit: React.PropTypes.func,
9+
onSelect: React.PropTypes.func,
10+
onHover: React.PropTypes.func,
911
onReset: React.PropTypes.func,
1012
style: React.PropTypes.object,
1113
submitLabel: React.PropTypes.string,
@@ -15,6 +17,8 @@ const propTypes = {
1517
const defaultProps = {
1618
initColor: '#40c4ff',
1719
onSubmit: () => {},
20+
onSelect: () => {},
21+
onHover: () => {},
1822
onReset: () => {},
1923
submitLabel: 'Submit',
2024
resetLabel: 'Reset',
@@ -26,6 +30,7 @@ export default class MaterialColorPicker extends React.Component {
2630
this.colorNames = this.colorNameList(_colors);
2731
this.toneNames = Object.keys(this.colorNames);
2832
this.rootDivRef = null;
33+
this.hoveredColor = '';
2934

3035
this.toneColorByName = this.toneColorByName.bind(this);
3136
this.satColorByName = this.satColorByName.bind(this);
@@ -55,8 +60,11 @@ export default class MaterialColorPicker extends React.Component {
5560

5661
this.titleName = this.titleName.bind(this);
5762
this.fullNameString = this.fullNameString.bind(this);
63+
this.createEvent = this.createEvent.bind(this);
64+
5865
this.onSubmit = this.onSubmit.bind(this);
5966
this.onReset = this.onReset.bind(this);
67+
this.onHover = this.onHover.bind(this);
6068

6169
this.rootDiv = this.rootDiv.bind(this);
6270
}
@@ -108,6 +116,13 @@ export default class MaterialColorPicker extends React.Component {
108116
};
109117
}
110118

119+
onHover(event) {
120+
if (event.target.value !== this.hoveredColor) {
121+
this.hoveredColor = event.target.value;
122+
this.props.onHover(event);
123+
}
124+
}
125+
111126
findColorName(colObj, colString) {
112127
const nameList = Object.keys(colObj);
113128
const name = nameList.find((val) => {return (colObj[val] === colString);});
@@ -220,8 +235,8 @@ export default class MaterialColorPicker extends React.Component {
220235
this.state.selectedSat, this.state.hoveredSat),
221236
}}
222237
onClick={this.selectSat(this.satColorByName(val))}
223-
onMouseOver={this.hoverSat(this.satColorByName(val))}
224-
onMouseOut={this.hoverReset()}
238+
onMouseEnter={this.hoverSat(this.satColorByName(val))}
239+
onMouseLeave={this.hoverReset()}
225240
>
226241
<div
227242
style={{ display: 'flex', alignItems: 'center', height: '100%' }}
@@ -293,32 +308,50 @@ export default class MaterialColorPicker extends React.Component {
293308
}
294309

295310
selectTone(toneName) {
296-
return () => {
297-
this.setState({ selectedTone: toneName });
311+
return (e) => {
312+
const event = this.createEvent(e, 'select');
313+
this.setState({ selectedTone: toneName },
314+
this.props.onSelect(event)
315+
);
298316
};
299317
}
300318

301319
selectSat(satName) {
302-
return () => {
303-
this.setState({ selectedSat: satName });
320+
return (e) => {
321+
const event = this.createEvent(e, 'select');
322+
this.setState({ selectedSat: satName },
323+
this.props.onSelect(event)
324+
);
304325
};
305326
}
306327

307328
hoverTone(toneName) {
308-
return () => {
309-
this.setState({ hoveredTone: toneName });
329+
return (e) => {
330+
const { nativeEvent, persist } = e;
331+
this.setState({ hoveredTone: toneName }, () => {
332+
const event = this.createEvent({nativeEvent, persist}, 'hover');
333+
this.onHover(event);
334+
});
310335
};
311336
}
312337

313338
hoverSat(satName) {
314-
return () => {
315-
this.setState({ hoveredSat: satName });
339+
return (e) => {
340+
const {nativeEvent, persist} = e;
341+
this.setState({ hoveredSat: satName }, ()=>{
342+
const event = this.createEvent({nativeEvent, persist}, 'hover');
343+
this.onHover(event);
344+
});
316345
};
317346
}
318347

319348
hoverReset() {
320-
return () => {
321-
this.setState({ hoveredTone: '', hoveredSat: '' });
349+
return (e) => {
350+
const {nativeEvent, persist} = e;
351+
this.setState({ hoveredTone: '', hoveredSat: '' }, ()=>{
352+
const event = this.createEvent({nativeEvent, persist}, 'hover');
353+
this.onHover(event);
354+
});
322355
};
323356
}
324357

@@ -412,6 +445,25 @@ export default class MaterialColorPicker extends React.Component {
412445
</div>);
413446
}
414447

448+
createEvent(e, type) {
449+
const event = {
450+
type,
451+
timeStamp: e.nativeEvent.timeStamp,
452+
eventPhase: 3,
453+
target: {
454+
value: _colors[this.fullNameString()],
455+
nativeEvent: e.nativeEvent,
456+
name: 'MaterialColorPicker',
457+
node: this.rootDivRef,
458+
...this.props,
459+
},
460+
persist() {
461+
e.persist();
462+
},
463+
};
464+
return event;
465+
}
466+
415467
rootDiv(div) {
416468
this.rootDivRef = div;
417469
}

src/stories/index.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,19 @@ storiesOf('Material Color Picker', module)
5858
</div>
5959

6060
))
61+
.add('events', () => (
62+
63+
<div style={{ width: 400, backgroundColor: '#c7c7c7' }} >
64+
<MaterialColorPicker
65+
initColor="#3f51b5"
66+
onSubmit={actionLog()}
67+
onSelect={actionLog()}
68+
onHover={actionLog()}
69+
onReset={actionLog()}
70+
/>
71+
</div>
72+
73+
))
6174
// storiesOf('Material Color Picker', module)
6275
.addWithInfo('API', `
6376
[![GitHub version](https://badge.fury.io/gh/sm-react%2Freact-material-color-picker.svg)](https://badge.fury.io/gh/sm-react%2Freact-material-color-picker)

0 commit comments

Comments
 (0)