UNPKG

creevey

Version:

Cross-browser screenshot testing tool for Storybook with fancy UI Runner

89 lines 4.22 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Tools = void 0; const react_1 = __importStar(require("react")); const qs_1 = require("qs"); const components_1 = require("@storybook/components"); const theming_1 = require("@storybook/theming"); const Icons_js_1 = require("./Icons.js"); const types_js_1 = require("../../../types.js"); const helpers_js_1 = require("../../shared/helpers.js"); const Button = (0, theming_1.styled)(components_1.IconButton)({ '&:disabled': { opacity: 0.5, cursor: 'default', }, '&:disabled:hover': { color: 'inherit', }, }); const Tools = ({ controller }) => { const [buttonClicked, setButtonClicked] = (0, react_1.useState)(); const [isRunning, setRunning] = (0, react_1.useState)(controller.status.isRunning); const forceUpdate = (0, helpers_js_1.useForceUpdate)(); const test = controller.getCurrentTest(); (0, react_1.useEffect)(() => { const unsubscribe = controller.onChangeTest(() => { forceUpdate(); }); return unsubscribe; }, [controller, forceUpdate]); (0, react_1.useEffect)(() => { const unsubscribe = controller.onUpdateStatus(({ isRunning }) => { if ((0, types_js_1.isDefined)(isRunning)) setRunning(isRunning); }); return unsubscribe; }, [controller]); if (!test) return null; function renderButton(type, title, onClick, icon) { const handleClick = () => { setButtonClicked(type); onClick(); }; const disabled = isRunning && buttonClicked != null && buttonClicked !== type; return ( // @ts-expect-error Fixed in https://github.com/storybookjs/storybook/pull/26623 react_1.default.createElement(Button, { onClick: () => { if (isRunning) controller.onStop(); else handleClick(); }, title: disabled ? '' : title, disabled: disabled }, buttonClicked === type && isRunning ? react_1.default.createElement(components_1.Icons, { icon: 'stop' }) : icon)); } return (react_1.default.createElement(react_1.Fragment, null, react_1.default.createElement(components_1.IconButton, { href: `http://localhost:${__CREEVEY_CLIENT_PORT__ ?? __CREEVEY_SERVER_PORT__ ?? 3000}/?${(0, qs_1.stringify)({ testPath: (0, helpers_js_1.getTestPath)(test), })}`, target: "_blank", title: "Show in Creevey UI" }, react_1.default.createElement(components_1.Icons, { icon: "sharealt" })), react_1.default.createElement(components_1.Separator, null), renderButton('RunAll', 'Run all', controller.onStartAllTests, react_1.default.createElement(Icons_js_1.ForwardIcon, null)), renderButton('RunStoryTests', 'Run all story tests', controller.onStartAllStoryTests, react_1.default.createElement(Icons_js_1.NextIcon, { width: 15, height: 11 })), renderButton('RunTest', 'Run', controller.onStart, react_1.default.createElement(components_1.Icons, { icon: "play" })))); }; exports.Tools = Tools; //# sourceMappingURL=Tools.js.map