UNPKG

9.59 kBJavaScriptView Raw
1"use strict";
2// *****************************************************************************
3// Copyright (C) 2022 Ericsson and others.
4//
5// This program and the accompanying materials are made available under the
6// terms of the Eclipse Public License v. 2.0 which is available at
7// http://www.eclipse.org/legal/epl-2.0.
8//
9// This Source Code may also be made available under the following Secondary
10// Licenses when the conditions for such availability set forth in the Eclipse
11// Public License v. 2.0 are satisfied: GNU General Public License, version 2
12// with the GNU Classpath Exception which is available at
13// https://www.gnu.org/software/classpath/license.html.
14//
15// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
16// *****************************************************************************
17var __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};
23var __metadata = (this && this.__metadata) || function (k, v) {
24 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25};
26var __param = (this && this.__param) || function (paramIndex, decorator) {
27 return function (target, key) { decorator(target, key, paramIndex); }
28};
29Object.defineProperty(exports, "__esModule", { value: true });
30exports.CompressedTreeWidget = void 0;
31require("../../../../src/browser/tree/tree-compression/tree-compression.css");
32const inversify_1 = require("inversify");
33const React = require("react");
34const context_menu_renderer_1 = require("../../context-menu-renderer");
35const tree_compression_service_1 = require("./tree-compression-service");
36const tree_1 = require("../tree");
37const tree_widget_1 = require("../tree-widget");
38const tree_selection_1 = require("../tree-selection");
39const tree_expansion_1 = require("../tree-expansion");
40const tree_view_welcome_widget_1 = require("../tree-view-welcome-widget");
41const compressed_tree_model_1 = require("./compressed-tree-model");
42let 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);
185CompressedTreeWidget = __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);
193exports.CompressedTreeWidget = CompressedTreeWidget;
194//# sourceMappingURL=compressed-tree-widget.js.map
\No newline at end of file