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 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
10 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
11 | };
|
12 | Object.defineProperty(exports, "__esModule", { value: true });
|
13 | const react_1 = __importStar(require("react"));
|
14 | const ink_1 = require("ink");
|
15 | const opn_1 = __importDefault(require("opn"));
|
16 | const algolia_1 = require("../algolia");
|
17 | const SPACE = ' ';
|
18 | const ARROW_LEFT = '\u001B[D';
|
19 | const ARROW_RIGHT = '\u001B[C';
|
20 |
|
21 | class Package extends react_1.PureComponent {
|
22 | constructor() {
|
23 | super(...arguments);
|
24 | this.state = {
|
25 | showDetails: false,
|
26 | };
|
27 | this.handleInput = (data) => {
|
28 | const { active, onClick, pkg } = this.props;
|
29 | const char = String(data);
|
30 | if (!active)
|
31 | return;
|
32 | switch (char) {
|
33 | case SPACE: {
|
34 | return onClick(pkg);
|
35 | }
|
36 | case ARROW_RIGHT: {
|
37 | if (this.state.showDetails && pkg.repository) {
|
38 | opn_1.default(pkg.repository.url);
|
39 | }
|
40 | return this.setState({ showDetails: true });
|
41 | }
|
42 | case ARROW_LEFT: {
|
43 | return this.setState({ showDetails: false });
|
44 | }
|
45 | }
|
46 | };
|
47 | }
|
48 | componentDidMount() {
|
49 | const { stdin, setRawMode } = this.props;
|
50 | if (setRawMode)
|
51 | setRawMode(true);
|
52 | stdin.on('data', this.handleInput);
|
53 | }
|
54 | componentWillUnmount() {
|
55 | const { stdin, setRawMode } = this.props;
|
56 | stdin.removeListener('data', this.handleInput);
|
57 | if (setRawMode)
|
58 | setRawMode(false);
|
59 | }
|
60 | |
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 | static getDerivedStateFromProps(props, state) {
|
68 | if (props.active === false)
|
69 | return Object.assign({}, state, { showDetails: false });
|
70 | return null;
|
71 | }
|
72 | render() {
|
73 | const { pkg, active, type } = this.props;
|
74 | const { showDetails } = this.state;
|
75 | const Cursor = () => (react_1.default.createElement(ink_1.Box, { marginRight: 1 }, (() => {
|
76 | if (active) {
|
77 | if (type === 'dependency')
|
78 | return react_1.default.createElement(ink_1.Color, { cyan: true }, `›`);
|
79 | if (type === 'devDependency')
|
80 | return react_1.default.createElement(ink_1.Color, { blue: true }, `›`);
|
81 | return react_1.default.createElement(ink_1.Color, { magenta: true }, `›`);
|
82 | }
|
83 | else {
|
84 | if (type === 'dependency')
|
85 | return react_1.default.createElement(ink_1.Color, { cyan: true }, `◉`);
|
86 | if (type === 'devDependency')
|
87 | return react_1.default.createElement(ink_1.Color, { blue: true }, `◉`);
|
88 | return react_1.default.createElement(ink_1.Text, null, ` `);
|
89 | }
|
90 | })()));
|
91 | const Downloads = () => (react_1.default.createElement(ink_1.Box, { width: this.getColumnWidth('humanDownloadsLast30Days'), marginRight: 1 },
|
92 | react_1.default.createElement(ink_1.Text, null, pkg.humanDownloadsLast30Days)));
|
93 | const Name = () => (react_1.default.createElement(ink_1.Box, { width: this.getColumnWidth('name'), marginRight: 1 },
|
94 | react_1.default.createElement(ink_1.Text, { bold: true }, pkg.name)));
|
95 | const Owner = () => (react_1.default.createElement(ink_1.Box, { width: this.getColumnWidth('owner') },
|
96 | react_1.default.createElement(ink_1.Text, null,
|
97 | react_1.default.createElement(ink_1.Color, { grey: true }, pkg.owner.name))));
|
98 | const Description = () => (react_1.default.createElement(ink_1.Box, { flexDirection: "row", marginX: 2 },
|
99 | react_1.default.createElement(ink_1.Text, null, pkg.description)));
|
100 | if (showDetails) {
|
101 | return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginY: 1 },
|
102 | react_1.default.createElement(ink_1.Box, { flexDirection: "row" },
|
103 | react_1.default.createElement(Cursor, null),
|
104 | react_1.default.createElement(Downloads, null),
|
105 | react_1.default.createElement(Name, null),
|
106 | react_1.default.createElement(Owner, null)),
|
107 | react_1.default.createElement(ink_1.Box, null,
|
108 | react_1.default.createElement(Description, null))));
|
109 | }
|
110 | return (react_1.default.createElement(ink_1.Box, { flexDirection: "row", marginY: 0, marginX: 0 },
|
111 | react_1.default.createElement(Cursor, null),
|
112 | react_1.default.createElement(Downloads, null),
|
113 | react_1.default.createElement(Name, null),
|
114 | react_1.default.createElement(Owner, null)));
|
115 | }
|
116 | |
117 |
|
118 |
|
119 |
|
120 |
|
121 |
|
122 | getColumnWidth(column) {
|
123 | const hits = this.props.hits
|
124 | .map(hit => {
|
125 | switch (column) {
|
126 | case 'owner': {
|
127 | return hit.owner.name;
|
128 | }
|
129 | case 'repository': {
|
130 | if (hit.repository) {
|
131 | return hit.repository.url;
|
132 | }
|
133 | else {
|
134 | return '';
|
135 | }
|
136 | }
|
137 | default: {
|
138 | return hit[column];
|
139 | }
|
140 | }
|
141 | })
|
142 | .map(c => c.length);
|
143 | return Math.max(...hits);
|
144 | }
|
145 | }
|
146 | class PackageWithStdinAndHits extends react_1.default.Component {
|
147 | render() {
|
148 | return (react_1.default.createElement(algolia_1.SearchContext.Consumer, null, values => (react_1.default.createElement(ink_1.StdinContext.Consumer, null, ({ stdin, setRawMode }) => (react_1.default.createElement(Package, Object.assign({}, this.props, { stdin: stdin, setRawMode: setRawMode, hits: values })))))));
|
149 | }
|
150 | }
|
151 | exports.default = PackageWithStdinAndHits;
|
152 |
|
\ | No newline at end of file |