UNPKG

@antdv/pro-utils

Version:

@antdv/pro-utils

69 lines (68 loc) 2.58 kB
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]; }