@fe6/water-pro
Version:
An enterprise-class UI design language and Vue-based implementation
39 lines (36 loc) • 1.52 kB
JavaScript
/** @format */
import { provide, inject, reactive, readonly as defineReadonly, defineComponent } from 'vue';
export function createContext(context) {
var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Symbol();
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var _options$readonly = options.readonly,
readonly = _options$readonly === void 0 ? true : _options$readonly,
_options$createProvid = options.createProvider,
createProvider = _options$createProvid === void 0 ? false : _options$createProvid,
_options$native = options.native,
_native = _options$native === void 0 ? false : _options$native;
var state = reactive(context);
var provideData = readonly ? defineReadonly(state) : state;
!createProvider && provide(key, _native ? context : provideData);
var Provider = createProvider ? defineComponent({
name: 'Provider',
inheritAttrs: false,
setup: function setup(_, _ref) {
var slots = _ref.slots;
provide(key, provideData);
return function () {
var _a;
return (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots);
};
}
}) : null;
return {
Provider: Provider,
state: state
};
}
export function useContext() {
var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Symbol();
var defaultValue = arguments.length > 1 ? arguments[1] : undefined;
return inject(key, defaultValue || {});
}