ivt
Version:
Ivt Components Library
111 lines (108 loc) • 4.04 kB
JavaScript
import * as React from 'react';
import { jsx } from 'react/jsx-runtime';
// packages/react/context/src/create-context.tsx
function createContext2(rootComponentName, defaultContext) {
const Context = React.createContext(defaultContext);
const Provider = (props)=>{
const { children, ...context } = props;
const value = React.useMemo(()=>context, Object.values(context));
return /* @__PURE__ */ jsx(Context.Provider, {
value,
children
});
};
Provider.displayName = rootComponentName + "Provider";
function useContext2(consumerName) {
const context = React.useContext(Context);
if (context) return context;
if (defaultContext !== void 0) return defaultContext;
throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``);
}
return [
Provider,
useContext2
];
}
function createContextScope(scopeName, createContextScopeDeps = []) {
let defaultContexts = [];
function createContext3(rootComponentName, defaultContext) {
const BaseContext = React.createContext(defaultContext);
const index = defaultContexts.length;
defaultContexts = [
...defaultContexts,
defaultContext
];
const Provider = (props)=>{
const { scope, children, ...context } = props;
const Context = scope?.[scopeName]?.[index] || BaseContext;
const value = React.useMemo(()=>context, Object.values(context));
return /* @__PURE__ */ jsx(Context.Provider, {
value,
children
});
};
Provider.displayName = rootComponentName + "Provider";
function useContext2(consumerName, scope) {
const Context = scope?.[scopeName]?.[index] || BaseContext;
const context = React.useContext(Context);
if (context) return context;
if (defaultContext !== void 0) return defaultContext;
throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``);
}
return [
Provider,
useContext2
];
}
const createScope = ()=>{
const scopeContexts = defaultContexts.map((defaultContext)=>{
return React.createContext(defaultContext);
});
return function useScope(scope) {
const contexts = scope?.[scopeName] || scopeContexts;
return React.useMemo(()=>({
[`__scope${scopeName}`]: {
...scope,
[scopeName]: contexts
}
}), [
scope,
contexts
]);
};
};
createScope.scopeName = scopeName;
return [
createContext3,
composeContextScopes(createScope, ...createContextScopeDeps)
];
}
function composeContextScopes(...scopes) {
const baseScope = scopes[0];
if (scopes.length === 1) return baseScope;
const createScope = ()=>{
const scopeHooks = scopes.map((createScope2)=>({
useScope: createScope2(),
scopeName: createScope2.scopeName
}));
return function useComposedScopes(overrideScopes) {
const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName })=>{
const scopeProps = useScope(overrideScopes);
const currentScope = scopeProps[`__scope${scopeName}`];
return {
...nextScopes2,
...currentScope
};
}, {});
return React.useMemo(()=>({
[`__scope${baseScope.scopeName}`]: nextScopes
}), [
nextScopes
]);
};
};
createScope.scopeName = baseScope.scopeName;
return createScope;
}
export { createContext2 as a, createContextScope as c };
//# sourceMappingURL=index-DT8WgpCS.mjs.map