@tdi2/di-core
Version:
TypeScript Dependency Injection 2 - Core DI framework
65 lines (62 loc) • 2.19 kB
JavaScript
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
// tools/functional-di-enhanced-transformer/__tests__/__fixtures__/complex-component.basic.transformed.snap.tsx
import React2 from "react";
// src/context.tsx
import * as React from "react";
import { createContext, useContext } from "react";
import { proxy, useSnapshot } from "valtio";
var DIContext = /* @__PURE__ */ createContext(null);
function useDI() {
const container = useContext(DIContext);
if (!container) {
throw new Error("useDI must be used within a DIProvider");
}
return container;
}
__name(useDI, "useDI");
function useService(token) {
const container = useDI();
const [_] = React.useState(proxy(container.resolve(token)));
if (_ === void 0) {
throw new Error(`Service not found: ${String(token)}`);
}
useSnapshot(_);
return _;
}
__name(useService, "useService");
// tools/functional-di-enhanced-transformer/__tests__/__fixtures__/complex-component.basic.transformed.snap.tsx
function ComplexComponent(props) {
const api = useService("ApiInterface");
const logger = useService("LoggerInterface");
const cache = void 0;
const user = void 0;
const services = {
api,
logger,
cache,
user
};
const { userId, config } = props;
React2.useEffect(() => {
services.logger.log(`Loading complex component for user ${userId}`);
services.api.getUserData(userId).then((data) => {
services.cache?.set(`user-${userId}`, data);
services.user?.updateProfile(data);
if (config.debug) {
services.logger.log(`Debug: Loaded user data for ${userId}`);
}
});
}, [
userId,
config.debug
]);
return /* @__PURE__ */ React2.createElement("div", {
"data-theme": config.theme
}, /* @__PURE__ */ React2.createElement("h1", null, "Complex Component"), /* @__PURE__ */ React2.createElement("p", null, "User: ", userId), /* @__PURE__ */ React2.createElement("p", null, "Debug: ", config.debug ? "ON" : "OFF"));
}
__name(ComplexComponent, "ComplexComponent");
export {
ComplexComponent
};
//# sourceMappingURL=complex-component.basic.transformed.snap.js.map