Add actions to add and open secret, variable, and input files
Signed-off-by: Sanjula Ganepola <sanjulagane@gmail.com>
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
import { ThemeIcon, TreeItem, TreeItemCollapsibleState, WorkspaceFolder } from "vscode";
|
||||
import { act } from "../../extension";
|
||||
import { Setting } from "../../settingsManager";
|
||||
import { StorageKey } from "../../storageManager";
|
||||
import { GithubLocalActionsTreeItem } from "../githubLocalActionsTreeItem";
|
||||
import SettingTreeItem from "./setting";
|
||||
import SettingFileTreeItem from "./settingFile";
|
||||
|
||||
export default class InputsTreeItem extends TreeItem implements GithubLocalActionsTreeItem {
|
||||
static contextValue = 'githubLocalActions.inputs';
|
||||
storageKey = StorageKey.InputFiles;
|
||||
|
||||
constructor(public workspaceFolder: WorkspaceFolder, inputs: Setting[]) {
|
||||
super('Inputs', TreeItemCollapsibleState.Collapsed);
|
||||
@@ -18,10 +21,19 @@ export default class InputsTreeItem extends TreeItem implements GithubLocalActio
|
||||
const items: GithubLocalActionsTreeItem[] = [];
|
||||
|
||||
const settings = await act.settingsManager.getSettings(this.workspaceFolder, false);
|
||||
for (const input of settings.inputs) {
|
||||
items.push(SettingTreeItem.getInputTreeItem(this.workspaceFolder, input));
|
||||
}
|
||||
|
||||
return items.sort((a, b) => a.label!.toString().localeCompare(b.label!.toString()));
|
||||
const inputTreeItems: GithubLocalActionsTreeItem[] = [];
|
||||
for (const input of settings.inputs) {
|
||||
inputTreeItems.push(SettingTreeItem.getInputTreeItem(this.workspaceFolder, input));
|
||||
}
|
||||
items.push(...inputTreeItems.sort((a, b) => a.label!.toString().localeCompare(b.label!.toString())));
|
||||
|
||||
const inputFileTreeItems: GithubLocalActionsTreeItem[] = [];
|
||||
for (const inputFile of settings.inputFiles) {
|
||||
inputFileTreeItems.push(SettingFileTreeItem.getInputTreeItem(this.workspaceFolder, inputFile));
|
||||
}
|
||||
items.push(...inputFileTreeItems.sort((a, b) => a.label!.toString().localeCompare(b.label!.toString())));
|
||||
|
||||
return items;
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,14 @@
|
||||
import { ThemeIcon, TreeItem, TreeItemCollapsibleState, WorkspaceFolder } from "vscode";
|
||||
import { act } from "../../extension";
|
||||
import { Setting } from "../../settingsManager";
|
||||
import { StorageKey } from "../../storageManager";
|
||||
import { GithubLocalActionsTreeItem } from "../githubLocalActionsTreeItem";
|
||||
import SettingTreeItem from "./setting";
|
||||
import SettingFileTreeItem from "./settingFile";
|
||||
|
||||
export default class SecretsTreeItem extends TreeItem implements GithubLocalActionsTreeItem {
|
||||
static contextValue = 'githubLocalActions.secrets';
|
||||
storageKey = StorageKey.SecretFiles;
|
||||
|
||||
constructor(public workspaceFolder: WorkspaceFolder, secrets: Setting[]) {
|
||||
super('Secrets', TreeItemCollapsibleState.Collapsed);
|
||||
@@ -18,10 +21,19 @@ export default class SecretsTreeItem extends TreeItem implements GithubLocalActi
|
||||
const items: GithubLocalActionsTreeItem[] = [];
|
||||
|
||||
const settings = await act.settingsManager.getSettings(this.workspaceFolder, false);
|
||||
for (const secret of settings.secrets) {
|
||||
items.push(SettingTreeItem.getSecretTreeItem(this.workspaceFolder, secret));
|
||||
}
|
||||
|
||||
return items.sort((a, b) => a.label!.toString().localeCompare(b.label!.toString()));
|
||||
const secretTreeItems: GithubLocalActionsTreeItem[] = [];
|
||||
for (const secret of settings.secrets) {
|
||||
secretTreeItems.push(SettingTreeItem.getSecretTreeItem(this.workspaceFolder, secret));
|
||||
}
|
||||
items.push(...secretTreeItems.sort((a, b) => a.label!.toString().localeCompare(b.label!.toString())));
|
||||
|
||||
const secretFileTreeItems: GithubLocalActionsTreeItem[] = [];
|
||||
for (const secretFile of settings.secretFiles) {
|
||||
secretFileTreeItems.push(SettingFileTreeItem.getSecretTreeItem(this.workspaceFolder, secretFile));
|
||||
}
|
||||
items.push(...secretFileTreeItems.sort((a, b) => a.label!.toString().localeCompare(b.label!.toString())));
|
||||
|
||||
return items;
|
||||
}
|
||||
}
|
||||
@@ -36,7 +36,8 @@ export default class SettingTreeItem extends TreeItem implements GithubLocalActi
|
||||
static getVariableTreeItem(workspaceFolder: WorkspaceFolder, variable: Setting): SettingTreeItem {
|
||||
return new SettingTreeItem(
|
||||
workspaceFolder,
|
||||
variable, StorageKey.Variables,
|
||||
variable,
|
||||
StorageKey.Variables,
|
||||
{
|
||||
contextValue: 'githubLocalActions.variable',
|
||||
iconPath: new ThemeIcon('symbol-variable')
|
||||
@@ -47,7 +48,8 @@ export default class SettingTreeItem extends TreeItem implements GithubLocalActi
|
||||
static getInputTreeItem(workspaceFolder: WorkspaceFolder, input: Setting): SettingTreeItem {
|
||||
return new SettingTreeItem(
|
||||
workspaceFolder,
|
||||
input, StorageKey.Inputs,
|
||||
input,
|
||||
StorageKey.Inputs,
|
||||
{
|
||||
contextValue: 'githubLocalActions.input',
|
||||
iconPath: new ThemeIcon('symbol-parameter')
|
||||
@@ -58,7 +60,8 @@ export default class SettingTreeItem extends TreeItem implements GithubLocalActi
|
||||
static getRunnerTreeItem(workspaceFolder: WorkspaceFolder, runner: Setting): SettingTreeItem {
|
||||
return new SettingTreeItem(
|
||||
workspaceFolder,
|
||||
runner, StorageKey.Runners,
|
||||
runner,
|
||||
StorageKey.Runners,
|
||||
{
|
||||
contextValue: 'githubLocalActions.runner',
|
||||
iconPath: new ThemeIcon('vm-connect')
|
||||
|
||||
59
src/views/settings/settingFile.ts
Normal file
59
src/views/settings/settingFile.ts
Normal file
@@ -0,0 +1,59 @@
|
||||
import { ThemeIcon, TreeItem, TreeItemCheckboxState, TreeItemCollapsibleState, WorkspaceFolder } from "vscode";
|
||||
import { SettingFile } from "../../settingsManager";
|
||||
import { StorageKey } from "../../storageManager";
|
||||
import { GithubLocalActionsTreeItem } from "../githubLocalActionsTreeItem";
|
||||
|
||||
export default class SettingFileTreeItem extends TreeItem implements GithubLocalActionsTreeItem {
|
||||
settingFile: SettingFile;
|
||||
storageKey: StorageKey;
|
||||
|
||||
constructor(public workspaceFolder: WorkspaceFolder, settingFile: SettingFile, storageKey: StorageKey, treeItem: { contextValue: string, iconPath: ThemeIcon }) {
|
||||
super(settingFile.name, TreeItemCollapsibleState.None);
|
||||
this.settingFile = settingFile;
|
||||
this.storageKey = storageKey;
|
||||
this.description = settingFile.path;
|
||||
this.contextValue = treeItem.contextValue;
|
||||
this.iconPath = treeItem.iconPath;
|
||||
this.checkboxState = settingFile.selected ? TreeItemCheckboxState.Checked : TreeItemCheckboxState.Unchecked;
|
||||
}
|
||||
|
||||
static getSecretTreeItem(workspaceFolder: WorkspaceFolder, secretFile: SettingFile): SettingFileTreeItem {
|
||||
return new SettingFileTreeItem(
|
||||
workspaceFolder,
|
||||
secretFile,
|
||||
StorageKey.SecretFiles,
|
||||
{
|
||||
contextValue: 'githubLocalActions.secretFile',
|
||||
iconPath: new ThemeIcon('gist-secret')
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
static getVariableTreeItem(workspaceFolder: WorkspaceFolder, variableFile: SettingFile): SettingFileTreeItem {
|
||||
return new SettingFileTreeItem(
|
||||
workspaceFolder,
|
||||
variableFile,
|
||||
StorageKey.VariableFiles,
|
||||
{
|
||||
contextValue: 'githubLocalActions.variableFile',
|
||||
iconPath: new ThemeIcon('file')
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
static getInputTreeItem(workspaceFolder: WorkspaceFolder, inputFile: SettingFile): SettingFileTreeItem {
|
||||
return new SettingFileTreeItem(
|
||||
workspaceFolder,
|
||||
inputFile,
|
||||
StorageKey.InputFiles,
|
||||
{
|
||||
contextValue: 'githubLocalActions.inputFile',
|
||||
iconPath: new ThemeIcon('file')
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
async getChildren(): Promise<GithubLocalActionsTreeItem[]> {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,14 @@
|
||||
import * as path from "path";
|
||||
import { CancellationToken, commands, EventEmitter, ExtensionContext, QuickPickItem, QuickPickItemKind, ThemeIcon, TreeCheckboxChangeEvent, TreeDataProvider, TreeItem, TreeItemCheckboxState, window, workspace } from "vscode";
|
||||
import { act } from "../../extension";
|
||||
import { Visibility } from "../../settingsManager";
|
||||
import { SettingFile, Visibility } from "../../settingsManager";
|
||||
import { StorageKey } from "../../storageManager";
|
||||
import { GithubLocalActionsTreeItem } from "../githubLocalActionsTreeItem";
|
||||
import InputsTreeItem from "./inputs";
|
||||
import SecretsTreeItem from "./secrets";
|
||||
import SettingTreeItem from "./setting";
|
||||
import SettingFileTreeItem from "./settingFile";
|
||||
import VariablesTreeItem from "./variables";
|
||||
import WorkspaceFolderSettingsTreeItem from "./workspaceFolderSettings";
|
||||
|
||||
export default class SettingsTreeDataProvider implements TreeDataProvider<GithubLocalActionsTreeItem> {
|
||||
@@ -15,6 +20,56 @@ export default class SettingsTreeDataProvider implements TreeDataProvider<Github
|
||||
context.subscriptions.push(
|
||||
commands.registerCommand('githubLocalActions.refreshSettings', async () => {
|
||||
this.refresh();
|
||||
}),
|
||||
commands.registerCommand('githubLocalActions.addSettingFiles', async (treeItem: SecretsTreeItem | VariablesTreeItem | InputsTreeItem, title: string) => {
|
||||
const settingFilesUris = await window.showOpenDialog({
|
||||
title: title,
|
||||
canSelectFiles: true,
|
||||
canSelectFolders: false,
|
||||
canSelectMany: true,
|
||||
defaultUri: treeItem.workspaceFolder.uri
|
||||
});
|
||||
|
||||
if (settingFilesUris) {
|
||||
const settingFilesPaths = (await act.settingsManager.getSettingFiles(treeItem.workspaceFolder, treeItem.storageKey)).map(settingFile => settingFile.path);
|
||||
const existingSettingFileNames: string[] = [];
|
||||
|
||||
for await (const uri of settingFilesUris) {
|
||||
const settingFileName = path.parse(uri.fsPath).name;
|
||||
|
||||
if (settingFilesPaths.includes(uri.fsPath)) {
|
||||
existingSettingFileNames.push(settingFileName);
|
||||
} else {
|
||||
const newSettingFile: SettingFile = {
|
||||
name: path.parse(uri.fsPath).name,
|
||||
path: uri.fsPath,
|
||||
selected: false
|
||||
};
|
||||
await act.settingsManager.editSettingFile(treeItem.workspaceFolder, newSettingFile, treeItem.storageKey);
|
||||
}
|
||||
}
|
||||
|
||||
if (existingSettingFileNames.length > 0) {
|
||||
window.showErrorMessage(`The following file(s) have already been added: ${existingSettingFileNames.join(', ')}`);
|
||||
}
|
||||
this.refresh();
|
||||
}
|
||||
}),
|
||||
commands.registerCommand('githubLocalActions.addSecretFiles', async (secretsTreeItem: SecretsTreeItem) => {
|
||||
await commands.executeCommand('githubLocalActions.addSettingFiles', secretsTreeItem, 'Add Secret File');
|
||||
}),
|
||||
commands.registerCommand('githubLocalActions.addVariableFiles', async (variablesTreeItem: VariablesTreeItem) => {
|
||||
await commands.executeCommand('githubLocalActions.addSettingFiles', variablesTreeItem, 'Add Variable File');
|
||||
}),
|
||||
commands.registerCommand('githubLocalActions.addInputFiles', async (inputsTreeItem: InputsTreeItem) => {
|
||||
await commands.executeCommand('githubLocalActions.addSettingFiles', inputsTreeItem, 'Add Input File');
|
||||
}),
|
||||
commands.registerCommand('githubLocalActions.openSettingFile', async (settingFileTreeItem: SettingFileTreeItem) => {
|
||||
const document = await workspace.openTextDocument(settingFileTreeItem.settingFile.path);
|
||||
await window.showTextDocument(document);
|
||||
}),
|
||||
commands.registerCommand('githubLocalActions.removeSettingFile', async (settingFileTreeItem: SettingFileTreeItem) => {
|
||||
|
||||
}),
|
||||
commands.registerCommand('githubLocalActions.show', async (settingTreeItem: SettingTreeItem) => {
|
||||
const newSetting = settingTreeItem.setting;
|
||||
@@ -167,11 +222,17 @@ export default class SettingsTreeDataProvider implements TreeDataProvider<Github
|
||||
return element;
|
||||
}
|
||||
|
||||
async onDidChangeCheckboxState(event: TreeCheckboxChangeEvent<SettingTreeItem>) {
|
||||
async onDidChangeCheckboxState(event: TreeCheckboxChangeEvent<SettingTreeItem | SettingFileTreeItem>) {
|
||||
for await (const [treeItem, state] of event.items) {
|
||||
const newSetting = treeItem.setting;
|
||||
newSetting.selected = (state === TreeItemCheckboxState.Checked);
|
||||
await act.settingsManager.editSetting(treeItem.workspaceFolder, newSetting, treeItem.storageKey);
|
||||
if (treeItem instanceof SettingTreeItem) {
|
||||
const newSetting = treeItem.setting;
|
||||
newSetting.selected = (state === TreeItemCheckboxState.Checked);
|
||||
await act.settingsManager.editSetting(treeItem.workspaceFolder, newSetting, treeItem.storageKey);
|
||||
} else {
|
||||
const newSettingFile = treeItem.settingFile;
|
||||
newSettingFile.selected = (state === TreeItemCheckboxState.Checked);
|
||||
await act.settingsManager.editSettingFile(treeItem.workspaceFolder, newSettingFile, treeItem.storageKey);
|
||||
}
|
||||
}
|
||||
this.refresh();
|
||||
}
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
import { ThemeIcon, TreeItem, TreeItemCollapsibleState, WorkspaceFolder } from "vscode";
|
||||
import { act } from "../../extension";
|
||||
import { Setting } from "../../settingsManager";
|
||||
import { StorageKey } from "../../storageManager";
|
||||
import { GithubLocalActionsTreeItem } from "../githubLocalActionsTreeItem";
|
||||
import SettingTreeItem from "./setting";
|
||||
import SettingFileTreeItem from "./settingFile";
|
||||
|
||||
export default class VariablesTreeItem extends TreeItem implements GithubLocalActionsTreeItem {
|
||||
static contextValue = 'githubLocalActions.variables';
|
||||
storageKey = StorageKey.VariableFiles;
|
||||
|
||||
constructor(public workspaceFolder: WorkspaceFolder, variables: Setting[]) {
|
||||
super('Variables', TreeItemCollapsibleState.Collapsed);
|
||||
@@ -18,10 +21,19 @@ export default class VariablesTreeItem extends TreeItem implements GithubLocalAc
|
||||
const items: GithubLocalActionsTreeItem[] = [];
|
||||
|
||||
const settings = await act.settingsManager.getSettings(this.workspaceFolder, false);
|
||||
for (const variable of settings.variables) {
|
||||
items.push(SettingTreeItem.getVariableTreeItem(this.workspaceFolder, variable));
|
||||
}
|
||||
|
||||
return items.sort((a, b) => a.label!.toString().localeCompare(b.label!.toString()));
|
||||
const variableTreeItems: GithubLocalActionsTreeItem[] = [];
|
||||
for (const variable of settings.variables) {
|
||||
variableTreeItems.push(SettingTreeItem.getVariableTreeItem(this.workspaceFolder, variable));
|
||||
}
|
||||
items.push(...variableTreeItems.sort((a, b) => a.label!.toString().localeCompare(b.label!.toString())));
|
||||
|
||||
const variableFileTreeItems: GithubLocalActionsTreeItem[] = [];
|
||||
for (const variableFile of settings.variableFiles) {
|
||||
variableFileTreeItems.push(SettingFileTreeItem.getVariableTreeItem(this.workspaceFolder, variableFile));
|
||||
}
|
||||
items.push(...variableFileTreeItems.sort((a, b) => a.label!.toString().localeCompare(b.label!.toString())));
|
||||
|
||||
return items;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user