UNPKG

2.95 kBJavaScriptView Raw
1"use strict";
2var __importStar = (this && this.__importStar) || function (mod) {
3 if (mod && mod.__esModule) return mod;
4 var result = {};
5 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
6 result["default"] = mod;
7 return result;
8};
9Object.defineProperty(exports, "__esModule", { value: true });
10const react_1 = __importStar(require("react"));
11const ink_1 = require("ink");
12const ARROW_UP = '\u001B[A';
13const ARROW_DOWN = '\u001B[B';
14const ARROW_LEFT = '\u001B[D';
15const ARROW_RIGHT = '\u001B[C';
16const ENTER = '\r';
17const CTRL_C = '\x03';
18const SPACE = ' ';
19const BACKSPACE = '\x08';
20const DELETE = '\x7F';
21class Search extends react_1.default.Component {
22 constructor() {
23 super(...arguments);
24 this.handleInput = (data) => {
25 const { active, value, onChange } = this.props;
26 const char = String(data);
27 /**
28 * Ignored input.
29 */
30 if ([
31 ARROW_UP,
32 ARROW_DOWN,
33 ARROW_LEFT,
34 ARROW_RIGHT,
35 ENTER,
36 CTRL_C,
37 SPACE,
38 ].includes(char) ||
39 !active) {
40 return;
41 }
42 /**
43 * Text input.
44 */
45 if (char === BACKSPACE || char === DELETE) {
46 onChange(value.slice(0, value.length - 1));
47 }
48 else {
49 onChange(`${value}${char}`);
50 }
51 };
52 }
53 componentDidMount() {
54 const { stdin, setRawMode } = this.props;
55 if (setRawMode)
56 setRawMode(true);
57 stdin.on('data', this.handleInput);
58 }
59 componentWillUnmount() {
60 const { stdin, setRawMode } = this.props;
61 stdin.removeListener('data', this.handleInput);
62 if (setRawMode)
63 setRawMode(false);
64 }
65 render() {
66 const { value } = this.props;
67 const hasValue = value.length > 0;
68 return (react_1.default.createElement(ink_1.Box, { flexDirection: "row" },
69 react_1.default.createElement(ink_1.Box, { marginRight: 1 },
70 react_1.default.createElement(ink_1.Text, null,
71 "Search packages on ",
72 react_1.default.createElement(ink_1.Color, { cyan: true }, "Yarn"),
73 ":")),
74 react_1.default.createElement(ink_1.Box, null,
75 react_1.default.createElement(ink_1.Color, { dim: !hasValue }, hasValue ? value : 'create-emma'))));
76 }
77}
78class SearchWithStdin extends react_1.PureComponent {
79 render() {
80 return (react_1.default.createElement(ink_1.StdinContext.Consumer, null, ({ stdin, setRawMode }) => (react_1.default.createElement(Search, Object.assign({}, this.props, { stdin: stdin, setRawMode: setRawMode })))));
81 }
82}
83exports.default = SearchWithStdin;
84//# sourceMappingURL=Search.js.map
\No newline at end of file