UNPKG

onwards

Version:

<p align="center"> <img alt='magoon-face' src='https://user-images.githubusercontent.com/14088342/230068165-5e013e79-2ff8-4fb5-a1f0-fd5b13e028a9.png' width='250'/> <h1 align="center">ONWARDS</h1> <p align="center">👏 Super simple shareable portforwa

71 lines (70 loc) 3.77 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; exports.__esModule = true; exports.ListItem = void 0; var jsx_runtime_1 = require("react/jsx-runtime"); var ink_1 = require("ink"); var jotai_1 = require("jotai"); var config_atom_1 = require("../state/config-atom"); var ink_spinner_1 = __importDefault(require("ink-spinner")); var theme_1 = require("../theme"); var react_1 = require("react"); var nav_atom_1 = require("../state/nav-atom"); var routes_1 = require("../pages/routes"); var button_1 = require("./button"); var useTask = function (_a) { var title = _a.title; var processAtom = (0, jotai_1.useAtom)((0, react_1.useMemo)(function () { return config_atom_1.configAtom; }, [title]))[0]; var item = (0, jotai_1.useAtom)((0, react_1.useMemo)(function () { return processAtom[title]; }, [processAtom]))[0]; return item; }; var useBounds = function (_a) { var isSelected = _a.isSelected, hasProcess = _a.hasProcess; var _b = (0, jotai_1.useAtom)(nav_atom_1.setBoundsAtom), setBounds = _b[1]; (0, react_1.useEffect)(function () { if (isSelected && hasProcess) { setBounds({ x: 1 }); } else if (isSelected) { setBounds({ x: 0 }); } }, [isSelected, hasProcess]); }; var noop = function () { return void {}; }; var ListItem = function (_a) { var title = _a.title, index = _a.index; var task = useTask({ title: title }); var _b = (0, jotai_1.useAtom)(nav_atom_1.coordinateAtom)[0], x = _b.x, y = _b.y; var _c = (0, jotai_1.useAtom)(routes_1.routeAtom), setRoute = _c[1]; var _d = (0, jotai_1.useAtom)(config_atom_1.retryProcessAtom), retry = _d[1]; var hasProcess = task.process !== null; var row = y >= 3 ? 3 : y; var isSelected = function (_a) { var _x = _a.x; return x === _x && row === index; }; useBounds({ isSelected: row === index, hasProcess: hasProcess }); return ((0, jsx_runtime_1.jsxs)(ink_1.Box, __assign({ flexDirection: "row", flexGrow: 1 }, { children: [(0, jsx_runtime_1.jsxs)(button_1.Button, __assign({ isSelected: isSelected({ x: 0 }), grow: true, title: title, onClick: task.status !== "loading" ? function () { return retry(title); } : noop }, { children: [(0, jsx_runtime_1.jsx)(ink_1.Spacer, {}, void 0), task.retries > 0 && (0, jsx_runtime_1.jsxs)(ink_1.Text, __assign({ color: "red" }, { children: ["(", task.retries, " retries) "] }), void 0), task.status === "loading" && (0, jsx_runtime_1.jsx)(ink_spinner_1["default"], { type: "bouncingBar" }, void 0), task.status === "error" && ((0, jsx_runtime_1.jsx)(ink_1.Text, __assign({ color: "red" }, { children: theme_1.theme.icons.error }), void 0)), task.status === "done" && ((0, jsx_runtime_1.jsx)(ink_1.Text, __assign({ color: "green" }, { children: theme_1.theme.icons.complete }), void 0))] }), void 0), hasProcess && ((0, jsx_runtime_1.jsx)(button_1.Button, { title: "Logs", isSelected: isSelected({ x: 1 }), onClick: function () { return setRoute({ route: "log", params: { title: title } }); } }, void 0))] }), "".concat(task))); }; exports.ListItem = ListItem;