From 800420307d4821be02fb43a86b372ddb63853fc7 Mon Sep 17 00:00:00 2001 From: Sanjula Ganepola Date: Thu, 26 Sep 2024 20:19:24 -0400 Subject: [PATCH] init settings view and refresh action Signed-off-by: Sanjula Ganepola --- package.json | 65 ++++++++++++++++--- src/extension.ts | 4 ++ .../components/componentsTreeDataProvider.ts | 8 ++- src/views/settings/environments.ts | 16 +++++ src/views/settings/secrets.ts | 16 +++++ .../settings/settingsTreeDataProvider.ts | 47 ++++++++++++++ src/views/settings/variables.ts | 16 +++++ .../workflows/workflowsTreeDataProvider.ts | 8 ++- 8 files changed, 170 insertions(+), 10 deletions(-) create mode 100644 src/views/settings/environments.ts create mode 100644 src/views/settings/secrets.ts create mode 100644 src/views/settings/settingsTreeDataProvider.ts create mode 100644 src/views/settings/variables.ts diff --git a/package.json b/package.json index 44be547..4fa615c 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,9 @@ "engines": { "vscode": "^1.93.0" }, - "activationEvents": [], + "activationEvents": [ + "onStartupFinished" + ], "main": "./dist/extension.js", "contributes": { "viewsContainers": { @@ -50,11 +52,6 @@ "name": "Workflows", "icon": "$(remote-explorer)" }, - { - "id": "events", - "name": "Events", - "icon": "$(rocket)" - }, { "id": "settings", "name": "Settings", @@ -62,7 +59,59 @@ } ] }, - "commands": [], + "commands": [ + { + "category": "GitHub Local Actions", + "command": "githubLocalActions.refreshComponents", + "title": "Refresh", + "icon": "$(refresh)" + }, + { + "category": "GitHub Local Actions", + "command": "githubLocalActions.refreshWorkflows", + "title": "Refresh", + "icon": "$(refresh)" + }, + { + "category": "GitHub Local Actions", + "command": "githubLocalActions.refreshSettings", + "title": "Refresh", + "icon": "$(refresh)" + } + ], + "menus": { + "commandPalette": [ + { + "command": "githubLocalActions.refreshComponents", + "when": "never" + }, + { + "command": "githubLocalActions.refreshWorkflows", + "when": "never" + }, + { + "command": "githubLocalActions.refreshSettings", + "when": "never" + } + ], + "view/title": [ + { + "command": "githubLocalActions.refreshComponents", + "when": "view == components", + "group": "navigation@0" + }, + { + "command": "githubLocalActions.refreshWorkflows", + "when": "view == workflows", + "group": "navigation@0" + }, + { + "command": "githubLocalActions.refreshSettings", + "when": "view == settings", + "group": "navigation@0" + } + ] + }, "colors": [ { "id": "GitHubLocalActions.enabled", @@ -118,4 +167,4 @@ "webpack": "^5.94.0", "webpack-cli": "^5.1.4" } -} +} \ No newline at end of file diff --git a/src/extension.ts b/src/extension.ts index 3510b2f..a870ad7 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -2,6 +2,7 @@ import * as vscode from 'vscode'; import { window } from 'vscode'; import ComponentsTreeDataProvider from './views/components/componentsTreeDataProvider'; import { DecorationProvider } from './views/decorationProvider'; +import SettingsTreeDataProvider from './views/settings/settingsTreeDataProvider'; import WorkflowsTreeDataProvider from './views/workflows/workflowsTreeDataProvider'; export function activate(context: vscode.ExtensionContext) { @@ -13,9 +14,12 @@ export function activate(context: vscode.ExtensionContext) { const componentsTreeView = window.createTreeView(ComponentsTreeDataProvider.VIEW_ID, { treeDataProvider: componentsTreeDataProvider }); const workflowsTreeDataProvider = new WorkflowsTreeDataProvider(context); const workflowsTreeView = window.createTreeView(WorkflowsTreeDataProvider.VIEW_ID, { treeDataProvider: workflowsTreeDataProvider }); + const settingsTreeDataProvider = new SettingsTreeDataProvider(context); + const settingsTreeView = window.createTreeView(SettingsTreeDataProvider.VIEW_ID, { treeDataProvider: settingsTreeDataProvider }); context.subscriptions.push( componentsTreeView, workflowsTreeView, + settingsTreeView, window.registerFileDecorationProvider(decorationProvider) ); } diff --git a/src/views/components/componentsTreeDataProvider.ts b/src/views/components/componentsTreeDataProvider.ts index bc5503d..d030439 100644 --- a/src/views/components/componentsTreeDataProvider.ts +++ b/src/views/components/componentsTreeDataProvider.ts @@ -1,4 +1,4 @@ -import { CancellationToken, EventEmitter, ExtensionContext, TreeDataProvider, TreeItem } from "vscode"; +import { CancellationToken, commands, EventEmitter, ExtensionContext, TreeDataProvider, TreeItem } from "vscode"; import { ComponentManager } from "../componentManager"; import { GithubLocalActionsTreeItem } from "../githubLocalActionsTreeItem"; import ComponentTreeItem from "./component"; @@ -11,6 +11,12 @@ export default class ComponentsTreeDataProvider implements TreeDataProvider { + this.refresh(); + }), + ); } refresh(element?: GithubLocalActionsTreeItem) { diff --git a/src/views/settings/environments.ts b/src/views/settings/environments.ts new file mode 100644 index 0000000..f2c8e7f --- /dev/null +++ b/src/views/settings/environments.ts @@ -0,0 +1,16 @@ +import { ThemeIcon, TreeItem, TreeItemCollapsibleState } from "vscode"; +import { GithubLocalActionsTreeItem } from "../githubLocalActionsTreeItem"; + +export default class EnvironmentsTreeItem extends TreeItem implements GithubLocalActionsTreeItem { + static contextValue = 'environments'; + + constructor() { + super('Environments', TreeItemCollapsibleState.Collapsed); + this.contextValue = EnvironmentsTreeItem.contextValue; + this.iconPath = new ThemeIcon('server-environment'); + } + + async getChildren(): Promise { + return []; + } +} \ No newline at end of file diff --git a/src/views/settings/secrets.ts b/src/views/settings/secrets.ts new file mode 100644 index 0000000..fa41e12 --- /dev/null +++ b/src/views/settings/secrets.ts @@ -0,0 +1,16 @@ +import { ThemeIcon, TreeItem, TreeItemCollapsibleState } from "vscode"; +import { GithubLocalActionsTreeItem } from "../githubLocalActionsTreeItem"; + +export default class SecretsTreeItem extends TreeItem implements GithubLocalActionsTreeItem { + static contextValue = 'secrets'; + + constructor() { + super('Secrets', TreeItemCollapsibleState.Collapsed); + this.contextValue = SecretsTreeItem.contextValue; + this.iconPath = new ThemeIcon('lock'); + } + + async getChildren(): Promise { + return []; + } +} \ No newline at end of file diff --git a/src/views/settings/settingsTreeDataProvider.ts b/src/views/settings/settingsTreeDataProvider.ts new file mode 100644 index 0000000..cb50606 --- /dev/null +++ b/src/views/settings/settingsTreeDataProvider.ts @@ -0,0 +1,47 @@ +import { CancellationToken, commands, EventEmitter, ExtensionContext, TreeDataProvider, TreeItem } from "vscode"; +import { GithubLocalActionsTreeItem } from "../githubLocalActionsTreeItem"; +import EnvironmentsTreeItem from "./environments"; +import SecretsTreeItem from "./secrets"; +import VariablesTreeItem from "./variables"; + +export default class SettingsTreeDataProvider implements TreeDataProvider { + private _onDidChangeTreeData = new EventEmitter(); + readonly onDidChangeTreeData = this._onDidChangeTreeData.event; + public static VIEW_ID = 'settings'; + + constructor(context: ExtensionContext) { + context.subscriptions.push( + commands.registerCommand('githubLocalActions.refreshSettings', async () => { + this.refresh(); + }), + ); + } + + refresh(element?: GithubLocalActionsTreeItem) { + this._onDidChangeTreeData.fire(element); + } + + getTreeItem(element: GithubLocalActionsTreeItem): GithubLocalActionsTreeItem | Thenable { + return element; + } + + async resolveTreeItem(item: TreeItem, element: GithubLocalActionsTreeItem, token: CancellationToken): Promise { + if (element.getToolTip) { + element.tooltip = await element.getToolTip(); + } + + return element; + } + + async getChildren(element?: GithubLocalActionsTreeItem): Promise { + if (element) { + return element.getChildren(); + } else { + return [ + new EnvironmentsTreeItem(), + new SecretsTreeItem(), + new VariablesTreeItem() + ]; + } + } +} \ No newline at end of file diff --git a/src/views/settings/variables.ts b/src/views/settings/variables.ts new file mode 100644 index 0000000..ec22a7a --- /dev/null +++ b/src/views/settings/variables.ts @@ -0,0 +1,16 @@ +import { ThemeIcon, TreeItem, TreeItemCollapsibleState } from "vscode"; +import { GithubLocalActionsTreeItem } from "../githubLocalActionsTreeItem"; + +export default class VariablesTreeItem extends TreeItem implements GithubLocalActionsTreeItem { + static contextValue = 'variables'; + + constructor() { + super('Variables', TreeItemCollapsibleState.Collapsed); + this.contextValue = VariablesTreeItem.contextValue; + this.iconPath = new ThemeIcon('symbol-key'); + } + + async getChildren(): Promise { + return []; + } +} \ No newline at end of file diff --git a/src/views/workflows/workflowsTreeDataProvider.ts b/src/views/workflows/workflowsTreeDataProvider.ts index 2b26dc4..f03aa8b 100644 --- a/src/views/workflows/workflowsTreeDataProvider.ts +++ b/src/views/workflows/workflowsTreeDataProvider.ts @@ -1,4 +1,4 @@ -import { CancellationToken, EventEmitter, ExtensionContext, TreeDataProvider, TreeItem } from "vscode"; +import { CancellationToken, commands, EventEmitter, ExtensionContext, TreeDataProvider, TreeItem } from "vscode"; import { GithubLocalActionsTreeItem } from "../githubLocalActionsTreeItem"; import { WorkflowManager } from "../workflowManager"; import WorkflowTreeItem from "./workflow"; @@ -11,6 +11,12 @@ export default class WorkflowsTreeDataProvider implements TreeDataProvider { + this.refresh(); + }), + ); } refresh(element?: GithubLocalActionsTreeItem) {