1 | "use strict";
|
2 | var __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 | };
|
9 | Object.defineProperty(exports, "__esModule", { value: true });
|
10 | const react_1 = __importStar(require("react"));
|
11 | const ink_1 = require("ink");
|
12 | const ARROW_UP = '\u001B[A';
|
13 | const ARROW_DOWN = '\u001B[B';
|
14 | const ARROW_LEFT = '\u001B[D';
|
15 | const ARROW_RIGHT = '\u001B[C';
|
16 | const ENTER = '\r';
|
17 | const CTRL_C = '\x03';
|
18 | const SPACE = ' ';
|
19 | const BACKSPACE = '\x08';
|
20 | const DELETE = '\x7F';
|
21 | class 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 |
|
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 |
|
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 | }
|
78 | class 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 | }
|
83 | exports.default = SearchWithStdin;
|
84 |
|
\ | No newline at end of file |