115 lines
4.0 KiB
JavaScript
115 lines
4.0 KiB
JavaScript
![]() |
import { __spreadArray } from "tslib";
|
||
|
import { getValueFromProps } from '../_util/simply';
|
||
|
function equal(a, b) {
|
||
|
if (a === b) {
|
||
|
return true;
|
||
|
}
|
||
|
if (a !== a && b !== b) {
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
var component2 = my.canIUse('component2');
|
||
|
export default (function (_a) {
|
||
|
var _b;
|
||
|
var _c = _a === void 0 ? {} : _a, _d = _c.valueKey, valueKey = _d === void 0 ? 'value' : _d, _e = _c.defaultValueKey, defaultValueKey = _e === void 0 ? 'defaultValue' : _e, _f = _c.scopeKey, scopeKey = _f === void 0 ? 'mixin' : _f, _g = _c.transformValue, transformValue = _g === void 0 ? function (value) { return ({
|
||
|
needUpdate: true,
|
||
|
value: value,
|
||
|
}); } : _g;
|
||
|
var mixin = {
|
||
|
data: (_b = {},
|
||
|
_b[scopeKey] = {
|
||
|
value: undefined,
|
||
|
updated: false,
|
||
|
controlled: false,
|
||
|
},
|
||
|
_b),
|
||
|
onInit: function () {
|
||
|
this.init();
|
||
|
},
|
||
|
deriveDataFromProps: function (nextProps) {
|
||
|
if (!equal(nextProps[valueKey], getValueFromProps(this, valueKey))) {
|
||
|
this.update(nextProps[valueKey], {
|
||
|
nextProps: nextProps,
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
didUpdate: function (prevProps) {
|
||
|
if (component2) {
|
||
|
return;
|
||
|
}
|
||
|
if (!equal(prevProps[valueKey], getValueFromProps(this, valueKey))) {
|
||
|
this.update(getValueFromProps(this, valueKey), {
|
||
|
nextProps: getValueFromProps(this),
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
didMount: function () {
|
||
|
if (component2) {
|
||
|
return;
|
||
|
}
|
||
|
this.init();
|
||
|
},
|
||
|
methods: {
|
||
|
init: function () {
|
||
|
var value;
|
||
|
value =
|
||
|
getValueFromProps(this, valueKey) !== undefined
|
||
|
? getValueFromProps(this, valueKey)
|
||
|
: getValueFromProps(this, defaultValueKey);
|
||
|
var needUpdate = this.update(value, {
|
||
|
nextProps: getValueFromProps(this),
|
||
|
}).needUpdate;
|
||
|
if (!needUpdate) {
|
||
|
this.updateControlled();
|
||
|
}
|
||
|
},
|
||
|
getValue: function (prevData) {
|
||
|
return (prevData || this.data)[scopeKey].value;
|
||
|
},
|
||
|
isEqualValue: function (prevData) {
|
||
|
if (!prevData[scopeKey].updated) {
|
||
|
return true;
|
||
|
}
|
||
|
return equal(this.getValue(prevData), this.getValue());
|
||
|
},
|
||
|
isControlled: function () {
|
||
|
if ('controlled' in getValueFromProps(this)) {
|
||
|
return getValueFromProps(this, 'controlled');
|
||
|
}
|
||
|
return valueKey in getValueFromProps(this);
|
||
|
},
|
||
|
updateControlled: function () {
|
||
|
var _a;
|
||
|
this.setData((_a = {},
|
||
|
_a[scopeKey] = {
|
||
|
controlled: this.isControlled(),
|
||
|
},
|
||
|
_a));
|
||
|
},
|
||
|
update: function (val, extra) {
|
||
|
var _a;
|
||
|
var args = [];
|
||
|
for (var _i = 2; _i < arguments.length; _i++) {
|
||
|
args[_i - 2] = arguments[_i];
|
||
|
}
|
||
|
var _b = transformValue.call.apply(transformValue, __spreadArray([this, val, extra], args, false)) || {}, needUpdate = _b.needUpdate, value = _b.value;
|
||
|
if (needUpdate) {
|
||
|
this.setData((_a = {},
|
||
|
_a[scopeKey] = {
|
||
|
value: value,
|
||
|
updated: true,
|
||
|
controlled: this.isControlled(),
|
||
|
},
|
||
|
_a));
|
||
|
}
|
||
|
return {
|
||
|
needUpdate: needUpdate,
|
||
|
value: value,
|
||
|
};
|
||
|
},
|
||
|
},
|
||
|
};
|
||
|
return mixin;
|
||
|
});
|