-
Notifications
You must be signed in to change notification settings - Fork 174
Expand file tree
/
Copy pathsettings.ts
More file actions
100 lines (82 loc) · 3.06 KB
/
settings.ts
File metadata and controls
100 lines (82 loc) · 3.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import * as vscode from "vscode";
import {canReachGitHubAPI} from "../api/canReachGitHubAPI";
import {SettingsRepoNode, getSettingNodes} from "./settings/settingsRepoNode";
import {EnvironmentNode} from "./settings/environmentNode";
import {EnvironmentsNode} from "./settings/environmentsNode";
import {RepoSecretsNode} from "./settings/repoSecretsNode";
import {SecretsNode} from "./settings/secretsNode";
import {SettingsExplorerNode} from "./settings/types";
import {getGitHubContext} from "../git/repository";
import {RepoVariablesNode} from "./settings/repoVariablesNode";
import {VariablesNode} from "./settings/variablesNode";
import {EnvironmentSecretsNode} from "./settings/environmentSecretsNode";
import {EnvironmentVariablesNode} from "./settings/environmentVariablesNode";
import {OrgVariablesNode} from "./settings/orgVariablesNode";
import {OrgSecretsNode} from "./settings/orgSecretsNode";
import {GitHubAPIUnreachableNode} from "./shared/gitHubApiUnreachableNode";
export class SettingsTreeProvider implements vscode.TreeDataProvider<SettingsExplorerNode> {
private _onDidChangeTreeData = new vscode.EventEmitter<SettingsExplorerNode | null>();
readonly onDidChangeTreeData = this._onDidChangeTreeData.event;
async refresh(): Promise<void> {
// Don't delete all the nodes if we can't reach GitHub API
if (await canReachGitHubAPI()) {
this._onDidChangeTreeData.fire(null);
} else {
await vscode.window.showWarningMessage("Unable to refresh, could not reach GitHub API");
}
}
getTreeItem(element: SettingsExplorerNode): vscode.TreeItem | Thenable<vscode.TreeItem> {
return element;
}
async getChildren(element?: SettingsExplorerNode | undefined): Promise<SettingsExplorerNode[]> {
const gitHubContext = await getGitHubContext();
if (!gitHubContext) {
return [new GitHubAPIUnreachableNode()];
}
if (!element) {
if (gitHubContext.repos.length > 0) {
if (gitHubContext.repos.length == 1) {
return getSettingNodes(gitHubContext.repos[0]);
}
return gitHubContext.repos.map(r => new SettingsRepoNode(r));
}
}
if (element instanceof SettingsRepoNode) {
return element.getSettings();
}
//
// Secrets
//
if (element instanceof SecretsNode) {
return element.nodes;
}
if (element instanceof RepoSecretsNode || element instanceof OrgSecretsNode) {
return element.getSecrets();
}
//
// Variables
//
if (element instanceof VariablesNode) {
return element.nodes;
}
if (element instanceof RepoVariablesNode || element instanceof OrgVariablesNode) {
return element.getVariables();
}
//
// Environments
//
if (element instanceof EnvironmentsNode) {
return element.getEnvironments();
}
if (element instanceof EnvironmentNode) {
return element.getNodes();
}
if (element instanceof EnvironmentSecretsNode) {
return element.getSecrets();
}
if (element instanceof EnvironmentVariablesNode) {
return element.getVariables();
}
return [];
}
}