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
| const defaultOption = {
| valueKey: 'value',
| defaultValueKey: 'defaultValue',
| changeEventName: 'change',
| strict: true,
| };
| function useControl(option = {}) {
| const { valueKey, defaultValueKey, changeEventName, strict } = Object.assign(Object.assign({}, defaultOption), option);
| const props = this.properties || {};
| const value = props[valueKey];
| const defaultValue = props[strict ? defaultValueKey : valueKey];
| let controlled = false;
| if (strict && typeof value !== 'undefined' && value !== null) {
| controlled = true;
| }
| const set = (newVal, extObj, fn) => {
| this.setData(Object.assign({ [`_${valueKey}`]: newVal }, extObj), fn);
| };
| return {
| controlled,
| initValue: controlled ? value : defaultValue,
| set,
| get: () => {
| return this.data[`_${valueKey}`];
| },
| change: (newVal, customChangeData, customUpdateFn) => {
| this.triggerEvent(changeEventName, typeof customChangeData !== 'undefined' ? customChangeData : newVal);
| if (controlled) {
| return;
| }
| if (typeof customUpdateFn === 'function') {
| customUpdateFn();
| }
| else {
| set(newVal);
| }
| },
| };
| }
| export { useControl };
|
|