@antdv/pro-utils
Version:
@antdv/pro-utils
69 lines (68 loc) • 2.58 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var stdin_exports = {};
__export(stdin_exports, {
useMergedState: () => useMergedState
});
module.exports = __toCommonJS(stdin_exports);
var import_vue = require("vue");
var import_useState = require("../useState");
function hasValue(value) {
return value !== void 0;
}
function useMergedState(defaultStateValue, option) {
const { defaultValue, value = (0, import_vue.ref)(), onChange, postState } = option || {};
const [innerValue, setInnerValue] = (0, import_useState.useState)(() => {
if (hasValue((0, import_vue.unref)(value))) {
return (0, import_vue.unref)(value);
} else if (hasValue(defaultValue)) {
return typeof defaultValue === "function" ? defaultValue() : defaultValue;
} else {
return typeof defaultStateValue === "function" ? defaultStateValue() : defaultStateValue;
}
});
const mergedValue = (0, import_vue.computed)(() => (0, import_vue.unref)(value) !== void 0 ? (0, import_vue.unref)(value) : innerValue.value);
const postMergedValue = (0, import_vue.computed)(() => {
return postState ? postState(mergedValue.value) : mergedValue.value;
});
const [prevValue, setPrevValue] = (0, import_useState.useState)([mergedValue.value]);
(0, import_vue.watch)(
prevValue,
() => {
const prev = prevValue.value[0];
if (innerValue !== prev) {
onChange == null ? void 0 : onChange(innerValue.value, prev);
}
},
{ flush: "post" }
);
(0, import_vue.watch)(
value,
() => {
if (!hasValue((0, import_vue.unref)(value))) {
setInnerValue((0, import_vue.unref)(value));
}
},
{ flush: "post" }
);
const triggerChange = (updater) => {
setInnerValue(updater);
setPrevValue([mergedValue.value]);
};
return [postMergedValue, triggerChange];
}