UNPKG

storybook-addon-module-mock

Version:

[![](https://img.shields.io/npm/l/storybook-addon-module-mock)](https://www.npmjs.com/package/storybook-addon-module-mock) [![](https://img.shields.io/npm/v/storybook-addon-module-mock)](https://www.npmjs.com/package/storybook-addon-module-mock) [![](http

63 lines (62 loc) 2.27 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parameters = exports.MockDecorator = void 0; const react_1 = __importDefault(require("react")); const core_events_1 = require("storybook/internal/core-events"); const preview_api_1 = require("storybook/preview-api"); const types_js_1 = require("./types.js"); const MockDecorator = (Story, context) => { const { parameters, name, id } = context; const emit = (0, preview_api_1.useChannel)({ [core_events_1.STORY_RENDER_PHASE_CHANGED]: ({ newPhase, storyId }) => { if (newPhase === 'completed' && storyId === id) { if (moduleMock.mocks) { moduleMock.mocks.forEach((mock) => mock.mockClear()); } } }, }); const [{ args }, render] = (0, preview_api_1.useState)({}); const params = (0, preview_api_1.useRef)(parameters); const { moduleMock } = params.current; if (!moduleMock?.mocks) { const m = moduleMock?.mock?.(); const mocks = !m ? undefined : Array.isArray(m) ? m : [m]; moduleMock.mocks = mocks; moduleMock.render = (args) => render({ args }); if (mocks) { const sendStat = () => { emit(types_js_1.ADDON_ID, mocks.map((mock) => { return [mock.__name, mock.mock]; })); }; mocks.forEach((mock) => (mock.__module.event = () => sendStat())); sendStat(); } else { emit(types_js_1.ADDON_ID, []); } } (0, preview_api_1.useEffect)(() => { return () => { if (moduleMock.mocks) { moduleMock.mocks.forEach((mock) => mock.mockRestore()); moduleMock.mocks = undefined; } }; }, [id]); if (name === '$$mock$$') return react_1.default.createElement(react_1.default.Fragment, null); return Story(args ? { args } : undefined); }; exports.MockDecorator = MockDecorator; exports.parameters = { moduleMock: { render: () => { // }, }, };