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
JavaScript
;
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;