1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
18 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
19 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
20 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
21 | return c > 3 && r && Object.defineProperty(target, key, r), r;
|
22 | };
|
23 | var __metadata = (this && this.__metadata) || function (k, v) {
|
24 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
25 | };
|
26 | var __param = (this && this.__param) || function (paramIndex, decorator) {
|
27 | return function (target, key) { decorator(target, key, paramIndex); }
|
28 | };
|
29 | Object.defineProperty(exports, "__esModule", { value: true });
|
30 | exports.CompressedTreeWidget = void 0;
|
31 | require("../../../../src/browser/tree/tree-compression/tree-compression.css");
|
32 | const inversify_1 = require("inversify");
|
33 | const React = require("react");
|
34 | const context_menu_renderer_1 = require("../../context-menu-renderer");
|
35 | const tree_compression_service_1 = require("./tree-compression-service");
|
36 | const tree_1 = require("../tree");
|
37 | const tree_widget_1 = require("../tree-widget");
|
38 | const tree_selection_1 = require("../tree-selection");
|
39 | const tree_expansion_1 = require("../tree-expansion");
|
40 | const tree_view_welcome_widget_1 = require("../tree-view-welcome-widget");
|
41 | const compressed_tree_model_1 = require("./compressed-tree-model");
|
42 | let CompressedTreeWidget = class CompressedTreeWidget extends tree_view_welcome_widget_1.TreeViewWelcomeWidget {
|
43 | constructor(props, model, contextMenuRenderer) {
|
44 | super(props, model, contextMenuRenderer);
|
45 | this.model = model;
|
46 | this.rows = new Map();
|
47 | }
|
48 | toggleCompression(newCompression = !this.compressionToggle.compress) {
|
49 | if (newCompression !== this.compressionToggle.compress) {
|
50 | this.compressionToggle.compress = newCompression;
|
51 | this.updateRows();
|
52 | }
|
53 | }
|
54 | shouldDisplayNode(node) {
|
55 | if (this.compressionToggle.compress && this.compressionService.isCompressionParticipant(node) && !this.compressionService.isCompressionHead(node)) {
|
56 | return false;
|
57 | }
|
58 | return super.shouldDisplayNode(node);
|
59 | }
|
60 | getDepthForNode(node, depths) {
|
61 | var _a;
|
62 | if (!this.compressionToggle.compress) {
|
63 | return super.getDepthForNode(node, depths);
|
64 | }
|
65 | const parent = (_a = this.compressionService.getCompressionHead(node.parent)) !== null && _a !== void 0 ? _a : node.parent;
|
66 | const parentDepth = depths.get(parent);
|
67 | return parentDepth === undefined ? 0 : tree_1.TreeNode.isVisible(node.parent) ? parentDepth + 1 : parentDepth;
|
68 | }
|
69 | toNodeRow(node, index, depth) {
|
70 | if (!this.compressionToggle.compress) {
|
71 | return super.toNodeRow(node, index, depth);
|
72 | }
|
73 | const row = { node, index, depth };
|
74 | if (this.compressionService.isCompressionHead(node)) {
|
75 | row.compressionChain = this.compressionService.getCompressionChain(node);
|
76 | }
|
77 | return row;
|
78 | }
|
79 | doRenderNodeRow({ node, depth, compressionChain }) {
|
80 | const nodeProps = { depth, compressionChain };
|
81 | return React.createElement(React.Fragment, null,
|
82 | this.renderIndent(node, nodeProps),
|
83 | this.renderNode(node, nodeProps));
|
84 | }
|
85 | rowIsSelected(node, props) {
|
86 | if (this.compressionToggle.compress && props.compressionChain) {
|
87 | return props.compressionChain.some(participant => tree_selection_1.SelectableTreeNode.isSelected(participant));
|
88 | }
|
89 | return tree_selection_1.SelectableTreeNode.isSelected(node);
|
90 | }
|
91 | getCaptionAttributes(node, props) {
|
92 | var _a, _b;
|
93 | const operativeNode = (_b = (_a = props.compressionChain) === null || _a === void 0 ? void 0 : _a.tail()) !== null && _b !== void 0 ? _b : node;
|
94 | return super.getCaptionAttributes(operativeNode, props);
|
95 | }
|
96 | getCaptionChildren(node, props) {
|
97 | if (!this.compressionToggle.compress || !props.compressionChain) {
|
98 | return super.getCaptionChildren(node, props);
|
99 | }
|
100 | return props.compressionChain.map((subNode, index, self) => {
|
101 | const classes = ['theia-tree-compressed-label-part'];
|
102 | if (tree_selection_1.SelectableTreeNode.isSelected(subNode)) {
|
103 | classes.push('theia-tree-compressed-selected');
|
104 | }
|
105 | const handlers = this.getCaptionChildEventHandlers(subNode, props);
|
106 | const caption = React.createElement("span", Object.assign({ className: classes.join(' '), key: subNode.id }, handlers), super.getCaptionChildren(subNode, props));
|
107 | if (index === self.length - 1) {
|
108 | return caption;
|
109 | }
|
110 | return [
|
111 | caption,
|
112 | React.createElement("span", { className: 'theia-tree-compressed-label-separator', key: subNode + '-separator' }, this.getSeparatorContent(node, props))
|
113 | ];
|
114 | });
|
115 | }
|
116 | getCaptionChildEventHandlers(node, props) {
|
117 | return {
|
118 | onClick: event => (event.stopPropagation(), this.handleClickEvent(node, event)),
|
119 | onDoubleClick: event => (event.stopPropagation(), this.handleDblClickEvent(node, event)),
|
120 | onContextMenu: event => (event.stopPropagation(), this.handleContextMenuEvent(node, event)),
|
121 | };
|
122 | }
|
123 | handleUp(event) {
|
124 | if (!this.compressionToggle.compress) {
|
125 | return super.handleUp(event);
|
126 | }
|
127 | const type = this.props.multiSelect && this.hasShiftMask(event) ? tree_selection_1.TreeSelection.SelectionType.RANGE : undefined;
|
128 | this.model.selectPrevRow(type);
|
129 | this.node.focus();
|
130 | }
|
131 | handleDown(event) {
|
132 | if (!this.compressionToggle.compress) {
|
133 | return super.handleDown(event);
|
134 | }
|
135 | const type = this.props.multiSelect && this.hasShiftMask(event) ? tree_selection_1.TreeSelection.SelectionType.RANGE : undefined;
|
136 | this.model.selectNextRow(type);
|
137 | this.node.focus();
|
138 | }
|
139 | async handleLeft(event) {
|
140 | if (!this.compressionToggle.compress) {
|
141 | return super.handleLeft(event);
|
142 | }
|
143 | if (Boolean(this.props.multiSelect) && (this.hasCtrlCmdMask(event) || this.hasShiftMask(event))) {
|
144 | return;
|
145 | }
|
146 | const active = this.focusService.focusedNode;
|
147 | if (tree_expansion_1.ExpandableTreeNode.isExpanded(active)
|
148 | && (this.compressionService.isCompressionHead(active)
|
149 | || !this.compressionService.isCompressionParticipant(active))) {
|
150 | await this.model.collapseNode(active);
|
151 | }
|
152 | else {
|
153 | this.model.selectParent();
|
154 | }
|
155 | }
|
156 | async handleRight(event) {
|
157 | if (!this.compressionToggle.compress) {
|
158 | return super.handleRight(event);
|
159 | }
|
160 | if (Boolean(this.props.multiSelect) && (this.hasCtrlCmdMask(event) || this.hasShiftMask(event))) {
|
161 | return;
|
162 | }
|
163 | const active = this.focusService.focusedNode;
|
164 | if (tree_expansion_1.ExpandableTreeNode.isCollapsed(active)
|
165 | && (!this.compressionService.isCompressionParticipant(active)
|
166 | || this.compressionService.isCompressionTail(active))) {
|
167 | await this.model.expandNode(active);
|
168 | }
|
169 | else if (tree_expansion_1.ExpandableTreeNode.is(active)) {
|
170 | this.model.selectNextNode();
|
171 | }
|
172 | }
|
173 | getSeparatorContent(node, props) {
|
174 | return '/';
|
175 | }
|
176 | };
|
177 | __decorate([
|
178 | (0, inversify_1.inject)(tree_compression_service_1.CompressionToggle),
|
179 | __metadata("design:type", Object)
|
180 | ], CompressedTreeWidget.prototype, "compressionToggle", void 0);
|
181 | __decorate([
|
182 | (0, inversify_1.inject)(tree_compression_service_1.TreeCompressionService),
|
183 | __metadata("design:type", tree_compression_service_1.TreeCompressionService)
|
184 | ], CompressedTreeWidget.prototype, "compressionService", void 0);
|
185 | CompressedTreeWidget = __decorate([
|
186 | (0, inversify_1.injectable)(),
|
187 | __param(0, (0, inversify_1.inject)(tree_widget_1.TreeProps)),
|
188 | __param(1, (0, inversify_1.inject)(compressed_tree_model_1.CompressedTreeModel)),
|
189 | __param(2, (0, inversify_1.inject)(context_menu_renderer_1.ContextMenuRenderer)),
|
190 | __metadata("design:paramtypes", [Object, compressed_tree_model_1.CompressedTreeModel,
|
191 | context_menu_renderer_1.ContextMenuRenderer])
|
192 | ], CompressedTreeWidget);
|
193 | exports.CompressedTreeWidget = CompressedTreeWidget;
|
194 |
|
\ | No newline at end of file |