-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathedit.js
52 lines (47 loc) · 1.28 KB
/
edit.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import React from 'react';
const edit = ({
isEditing,
onActivate,
onValue,
getEditedValue = v => v,
editingProps = {},
activateEvent = 'onClick'
} = {}) => {
if (!isEditing) {
throw new Error('edit - Missing isEditing!');
}
if (!onActivate) {
throw new Error('edit - Missing onActivate!');
}
if (!onValue) {
throw new Error('edit - Missing onValue!');
}
const defaultValueComponent = (value, extraParameters, props) => props;
return (editorComponent, valueComponent = defaultValueComponent) => {
if (!editorComponent) {
throw new Error('edit - Missing editor!');
}
return (value, extraParameters, props = {}) => (
isEditing(extraParameters) ?
{
children: React.createElement(
editorComponent,
{
...props,
extraParameters,
[editingProps.value || 'value']: getEditedValue(value),
[editingProps.onValue || 'onValue']: v => onValue(
{ value: v, ...extraParameters }
)
}
)
} :
{
...valueComponent(value, extraParameters, props),
// Override activation, perhaps not so nice
[activateEvent]: event => onActivate({ event, ...extraParameters })
}
);
};
};
export default edit;