From 9c8127d98dcd1cc952cbef00da35ddb9adfab020 Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Wed, 25 Oct 2023 21:31:27 +0500 Subject: [PATCH 01/17] version bump --- .vscode/launch.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 0318c06..5a6d694 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,7 +3,7 @@ // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 { - "version": "1.0.0", + "version": "1.0.1", "configurations": [ { "name": "Run Extension", diff --git a/package.json b/package.json index 2306914..6c4da40 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "publisher": "Pullflow", "displayName": "Pullflow", "description": "Enhance your code review process by consolidating interactions within VS Code and directly integrating with platforms like Slack and GitHub.", - "version": "1.0.0", + "version": "1.0.1", "preview": true, "license": "MIT", "engines": { From 1034a764482bed454bae62fc7988b80dc89aa9e2 Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Wed, 25 Oct 2023 21:38:43 +0500 Subject: [PATCH 02/17] updated desc and categories --- package.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 6c4da40..d91c18c 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "pullflow", "publisher": "Pullflow", "displayName": "Pullflow", - "description": "Enhance your code review process by consolidating interactions within VS Code and directly integrating with platforms like Slack and GitHub.", + "description": "Code review collaboration across GitHub, Slack, and VS Code.", "version": "1.0.1", "preview": true, "license": "MIT", @@ -14,11 +14,14 @@ }, "icon": "assets/pullflow.png", "categories": [ - "SCM Providers", + "Programming Languages", + "Machine Learning", + "Education", + "Snippets", "Other" ], "galleryBanner": { - "color": "#795DBD", + "color": "#F6F4F9", "theme": "light" }, "private": true, From e771c2fbcd91279860200bd8c13dfce2cf6bf556 Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Thu, 26 Oct 2023 19:29:04 +0500 Subject: [PATCH 03/17] updated statusBar error icon --- src/utils/pullRequestsState.ts | 3 --- src/views/statusBar/statusBar.ts | 27 ++++++++++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/utils/pullRequestsState.ts b/src/utils/pullRequestsState.ts index 55645fb..44a9941 100644 --- a/src/utils/pullRequestsState.ts +++ b/src/utils/pullRequestsState.ts @@ -52,9 +52,6 @@ export const PullRequestState = { if (errorCount.count >= MAX_ERROR_COUNT) { StatusBar.update({ context, statusBar, state: StatusBarState.Error }) } - window.showErrorMessage( - `Pullflow: Couldn't fetch pull requests. ${codeReviews.error.message}` - ) return } await Store.set(context, { diff --git a/src/views/statusBar/statusBar.ts b/src/views/statusBar/statusBar.ts index 2978744..5a1dac0 100644 --- a/src/views/statusBar/statusBar.ts +++ b/src/views/statusBar/statusBar.ts @@ -68,11 +68,15 @@ export const StatusBar = { log.info('updating status bar', module) if (state === StatusBarState.SignedIn) { - statusBarProperties.signedIn.text = getStatusBarText(context) + statusBarProperties.signedIn.text = getStatusBarText({ context }) statusBar = Object.assign(statusBar, statusBarProperties.signedIn) } else if (state === StatusBarState.Loading) { statusBar = Object.assign(statusBar, statusBarProperties.loading) } else if (state === StatusBarState.Error) { + statusBarProperties.error.text = getStatusBarText({ + context, + showErrorIcon: true, + }) statusBar = Object.assign(statusBar, statusBarProperties.error) } else { statusBar = Object.assign(statusBar, statusBarProperties.signedOut) @@ -82,7 +86,13 @@ export const StatusBar = { } /** computes status bar text */ -function getStatusBarText(context: ExtensionContext): string { +function getStatusBarText({ + context, + showErrorIcon = false, +}: { + context: ExtensionContext + showErrorIcon?: boolean +}): string { if (STATUS_BAR_ICON_PREVIEW) { const allIcons = IconReference.map((k) => `$(${k})`).join('') return '$(pullflow-icon)' + allIcons @@ -93,12 +103,15 @@ function getStatusBarText(context: ExtensionContext): string { previousPresenceStatus, } = Store.get(context) - if (!pendingUserCodeReviews && !userAuthoredCodeReviews) return '' + const presenceIcon = + previousPresenceStatus === PresenceStatus.Flow ? '$(symbol-event)' : '' + const errorIcon = showErrorIcon ? ' $(warning) ' : '' + + if (!pendingUserCodeReviews && !userAuthoredCodeReviews) + return `${presenceIcon} ${errorIcon} $(pullflow-icon)` const pendingCodeReviewsCount = pendingUserCodeReviews?.length || 0 const authoredCodeReviewsCount = userAuthoredCodeReviews?.length || 0 - const presenceIcon = - previousPresenceStatus === PresenceStatus.Flow ? '$(symbol-event)' : '' if ( pendingCodeReviewsCount < MAX_PR_COUNT && authoredCodeReviewsCount < MAX_PR_COUNT @@ -113,8 +126,8 @@ function getStatusBarText(context: ExtensionContext): string { ) || [] return `${presenceIcon} ${pendingCodeReviewIcons.join( '' - )} $(pullflow-icon)\t${authoredCodeReviewIcons.join('')}` + )} ${errorIcon} $(pullflow-icon) ${authoredCodeReviewIcons.join('')}` } else { - return `${presenceIcon} ${pendingCodeReviewsCount} $(pullflow-icon) ${authoredCodeReviewsCount}` + return `${presenceIcon} ${pendingCodeReviewsCount} ${errorIcon} $(pullflow-icon) ${authoredCodeReviewsCount}` } } From 6d5332deabc2aceff3734a7717086821ff0a27c1 Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Thu, 26 Oct 2023 19:31:27 +0500 Subject: [PATCH 04/17] updated reconnect.ts --- src/commands/reconnect.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/commands/reconnect.ts b/src/commands/reconnect.ts index 2acd705..51f24b9 100644 --- a/src/commands/reconnect.ts +++ b/src/commands/reconnect.ts @@ -47,5 +47,8 @@ export const Reconnect = async ( userAuthoredCodeReviews: codeReviews.data.authored, }) StatusBar.update({ context, statusBar, state: StatusBarState.SignedIn }) + + commands.executeCommand(Command.activePullRequests) + return } From 9b06da55c4ac3badb5967fda5553f4a7cee878b6 Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Mon, 30 Oct 2023 23:55:23 +0500 Subject: [PATCH 05/17] created command for welcome --- package.json | 8 ++++++-- src/utils/commands.ts | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6c4da40..0eb645f 100644 --- a/package.json +++ b/package.json @@ -42,11 +42,11 @@ }, { "command": "pullflow.login", - "title": "Pullflow: login" + "title": "Pullflow: Login" }, { "command": "pullflow.logout", - "title": "Pullflow: logout" + "title": "Pullflow: Logout" }, { "command": "pullflow.reconnect", @@ -59,6 +59,10 @@ { "command": "pullflow.toggle-flow-state", "title": "Pullflow: Toggle Flow state" + }, + { + "command": "pullflow.welcome-view", + "title": "Pullflow: Welcome" } ], "keybindings": [ diff --git a/src/utils/commands.ts b/src/utils/commands.ts index 1175b62..076fb44 100644 --- a/src/utils/commands.ts +++ b/src/utils/commands.ts @@ -4,4 +4,5 @@ export const Command = { logout: 'pullflow.logout', reconnect: 'pullflow.reconnect', toggleFlowState: 'pullflow.toggle-flow-state', + welcomeView: 'pullflow.welcome-view', } From 4a095e2b4496af27aa91619ea8ee842efe1a85e8 Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Mon, 30 Oct 2023 23:57:25 +0500 Subject: [PATCH 06/17] created web view for welcome --- src/views/webviews/welcome/welcome.ts | 168 ++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 src/views/webviews/welcome/welcome.ts diff --git a/src/views/webviews/welcome/welcome.ts b/src/views/webviews/welcome/welcome.ts new file mode 100644 index 0000000..bf6ae72 --- /dev/null +++ b/src/views/webviews/welcome/welcome.ts @@ -0,0 +1,168 @@ +import { ExtensionContext, ViewColumn, Webview, window, Uri } from 'vscode' + +const WelcomeView = { + title: 'Welcome to Pullflow', + type: 'welcome-view', +} + +export const Welcome = { + show: (context: ExtensionContext) => { + const column = window.activeTextEditor?.viewColumn || ViewColumn.One + const panel = window.createWebviewPanel( + WelcomeView.type, + WelcomeView.title, + column + ) + panel.iconPath = Uri.joinPath(context.extensionUri, 'assets/pullflow.png') + panel.webview.html = Welcome.getHtml(panel.webview, context) + panel.reveal(column) + }, + + getHtml: (webview: Webview, context: ExtensionContext) => { + const assetsPath = webview.asWebviewUri( + Uri.joinPath(context.extensionUri, 'assets') + ) + const stylePath = webview.asWebviewUri( + Uri.joinPath( + context.extensionUri, + 'src/views/webviews/welcome/welcome.css' + ) + ) + + return ` + + + + Welcome to Pullflow + + + + + +
+ Pullflow +
+ Code review collaboration across GitHub, Slack, and VS Code. +
+
+
+
+ +
+

Pullflow is an AI-enhanced code review collaboration platform backed by the co-founder of GitHub and used by + some of the most innovative dev teams, including Epic Games, Avenue, Hear.com, + and RedwoodJS.

+

+ It offers seamless integration with your Slack and GitHub accounts. Simply + authenticate your accounts within Pullflow, and the + synchronization will be automatically established. New to Pullflow? Sign + In +

+
+
+ Main +
+
+

Supercharge your workflow with Pullflow for VS Code

+
    +

    ●   Effortlessly communicate across GitHub, Slack, and VS Code.

    +

    ●   Engage in meaningful conversations with contextual AI during PR discussions.

    +

    ●   Stay fully engaged in your ongoing code reviews.

    +

    ●   Stay updated in real-time on CI/CD and Automation.

    +

    ●   Execute actions on your code reviews using natural language.

    +
+
+
+ +

My Active Pull Requests

+

PR Dashboard: Our extension equips VS Code with a PR Dashboard, offering a consolidated view + of your active pull requests. It enables quick identification and focus on pull requests needing attention, + all within VS Code Quick Pick.

+ PR-Dashboard +
+
+

Quick Actions

+

The extension comes with a set of actions designed to help you take care of your code review tasks and return + to your flow state. Actions you can take on pull request from VS Code are:

+
    +
  •   Open in Slack
  • +
  •   Open in GitHub
  • +
  •   Send message to author/reviewer on Slack
  • +
  •   Approve pull request
  • +
  •   Add labels on pull requests
  • +
  •   Add reviewers on pull requests
  • +
  •   Add assignees on pull requests
  • +
+
+ PR-Chat-Image +
+
+
+
+
+

Get Started

+
+ Pullflow is integrated with GitHub, Slack, and VS Code to help you merge PRs 4X faster. Here is + how you can get started. +
+
+
    +
  1. Sign up on Pullflow and connect your Slack and GitHub accounts. +
  2. +
  3. Click on Sign in to Pullflow from the VS Code status bar.
  4. +
  5. Thats it! See statuses of your pull requests in status bar.
  6. +
      +
+
+
+

Commands

+ + + + + + + + + + + + + + + + + + +
Pullflow: Active Pull Requests (ctrl/cmd+Shift+,)
Pullflow: Login
Pullflow: Logout
Pullflow: Reconnect
Pullflow: Welcome
+
+
+

Iconography

+

The extension offers a convenient way to quickly understand the status of your Pull Requests (PRs) at a + glance. It provides an overview of your pull request life cycles using icon-based indicators.

+
+ Main +
+
+
+

Become a Contributor

+

This extension is an open-source project created by Pullflow Inc. + We encourage contributions, bug reports, and new feature suggestions. Feel free to fork the repository and add + your own features.

+

This is just the beginning of Pullflow's VS Code Slack integration, and we are eager to make improvements + based on your feedback. Please don't hesitate to share your thoughts with us through GitHub issues or on Twitter @pullflow.

+
+
+
+
+ This tool is designed by IDE-integration team at Pullflow for developers seeking a unified workspace that reduces + context-switching and enhances productivity by integrating codebase management, code review, and team + communication into a single interface. + +
+ + ` + }, +} From f7ee45c87a487fdf90f022e7833201793b6304d7 Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Mon, 30 Oct 2023 23:57:34 +0500 Subject: [PATCH 07/17] added css --- src/views/webviews/welcome/welcome.css | 92 ++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/views/webviews/welcome/welcome.css diff --git a/src/views/webviews/welcome/welcome.css b/src/views/webviews/welcome/welcome.css new file mode 100644 index 0000000..b675f83 --- /dev/null +++ b/src/views/webviews/welcome/welcome.css @@ -0,0 +1,92 @@ +body { + font-family: Arial, sans-serif; +} + +header { + margin-top: 20px; +} + +header img { + width: 25%; + height: 25%; + height: auto; +} + +.container { + display: flex; +} + +.column { + flex: 1; + +} + +.column:first-child { + flex: 2; +} + +.column:last-child { + margin-left: 50px; +} + +#desc { + color: #f6f4f9; + margin: 5px; + font-size: 1.0em; +} + +#intro p { + color: #c2c9d3; + line-height: 1.5; +} + +#intro strong { + color: #ffffff; +} + +#main-img { + width: 100%; + height: auto; + margin-left: 10px; +} + +h3 { + color: #f6f4f9; + font-size: 1.5em; + margin-bottom: 10px; +} + +table { + width: 100%; + border-collapse: collapse; +} + +tbody tr { + border-bottom: 1px solid #64748b; +} + +td { + padding: 10px; + color: #c2c9d3; +} + +#vs-code-icon { + width: 100%; + height: auto; +} + +#command-div { + margin-bottom: 20px; + margin-top: 20px; +} + +#second-column { + color: #64748b; + line-height: 1.5; +} + +#footer { + margin-top: 20px; + line-height: 1.5; + margin-bottom: 15px; +} \ No newline at end of file From 20bc83f467e9edd9a0a1e6eb6be0ff738c11665f Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Mon, 30 Oct 2023 23:57:48 +0500 Subject: [PATCH 08/17] added pullflow main icon --- assets/pullflow-logo.png | Bin 0 -> 25492 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/pullflow-logo.png diff --git a/assets/pullflow-logo.png b/assets/pullflow-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fb953ca9a7f31f56961c1c87e1db862eeea97511 GIT binary patch literal 25492 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 M Date: Mon, 30 Oct 2023 23:58:53 +0500 Subject: [PATCH 09/17] created welcomeView in commands --- src/commands/welcomeView.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/commands/welcomeView.ts diff --git a/src/commands/welcomeView.ts b/src/commands/welcomeView.ts new file mode 100644 index 0000000..bfe99db --- /dev/null +++ b/src/commands/welcomeView.ts @@ -0,0 +1,6 @@ +import { ExtensionContext } from 'vscode' +import { Welcome } from '../views/webviews/welcome/welcome' + +export const WelcomeView = (context: ExtensionContext) => { + Welcome.show(context) +} From 9bd6af69117ea1bef599611b8fc2fea435c803f6 Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Tue, 31 Oct 2023 00:03:34 +0500 Subject: [PATCH 10/17] opening welcome page on first installation --- .vscode/settings.json | 2 ++ src/extension.ts | 23 +++++++++++++++-------- src/utils/types.ts | 1 + 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 5549c58..d3778c1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -16,10 +16,12 @@ "dbaeumer", "nosources", "Pullflow", + "quickpicks", "Relogin", "thumbsup", "uuidv", "vscodeignore", + "Webviews", "Xids" ], "editor.tabSize": 2, diff --git a/src/extension.ts b/src/extension.ts index d62aa2b..b5a7f3c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -10,13 +10,15 @@ import { Logout } from './commands/logout' import { ActivePullRequests } from './commands/activePullRequests' import { Authorization } from './utils/authorization' import { ToggleFlowState } from './commands/toggleFlowState' +import { Welcome } from './views/webviews/welcome/welcome' const module = 'extension.ts' export async function activate(context: ExtensionContext) { log.info('activating extension', module) - await checkSessionAndLogin(context) + checkFirstActivation(context) + const statusBar: StatusBarItem = await StatusBar.activate(context) const { pollIntervalId, focusStateEvent, presenceInterval } = await initialize({ @@ -70,17 +72,22 @@ export async function activate(context: ExtensionContext) { ToggleFlowState(context, statusBar) ) ) + context.subscriptions.push( + commands.registerCommand(Command.welcomeView, () => { + Welcome.show(context) + }) + ) } // this method is called when your extension is deactivated export function deactivate() {} -const checkSessionAndLogin = async (context: ExtensionContext) => { - const session = await Authorization.currentSession(context) - if (!session) { - window.showInformationMessage( - `Pullflow: Please login to continue using extension` - ) - commands.executeCommand(Command.login) +const checkFirstActivation = (context: ExtensionContext) => { + const isFirstActivation = !Store.get(context)?.extensionId + + if (isFirstActivation) { + commands.executeCommand(Command.welcomeView) + const extensionId = `${context.extension.packageJSON.publisher}.${context.extension.packageJSON.name}` + Store.set(context, { extensionId }) } } diff --git a/src/utils/types.ts b/src/utils/types.ts index 13fd2d3..07f480a 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -38,6 +38,7 @@ export type RepoChannelConnection = { } export type CacheObject = { + extensionId?: string pendingUserCodeReviews?: [UserCodeReview] userAuthoredCodeReviews?: [UserCodeReview] user?: User From 9f5c1adf7ce2504585aaf81a0be224c1903fea1c Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Tue, 31 Oct 2023 00:06:10 +0500 Subject: [PATCH 11/17] minor changes --- src/views/webviews/welcome/welcome.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/webviews/welcome/welcome.ts b/src/views/webviews/welcome/welcome.ts index bf6ae72..89e9110 100644 --- a/src/views/webviews/welcome/welcome.ts +++ b/src/views/webviews/welcome/welcome.ts @@ -119,7 +119,7 @@ export const Welcome = { - + From cbc763cc1e9374cf69bcc857d8005e5244f323e2 Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Wed, 1 Nov 2023 00:31:53 +0500 Subject: [PATCH 12/17] updated sequence of icons --- src/views/statusBar/statusBar.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/views/statusBar/statusBar.ts b/src/views/statusBar/statusBar.ts index 5a1dac0..d1fa81b 100644 --- a/src/views/statusBar/statusBar.ts +++ b/src/views/statusBar/statusBar.ts @@ -108,7 +108,7 @@ function getStatusBarText({ const errorIcon = showErrorIcon ? ' $(warning) ' : '' if (!pendingUserCodeReviews && !userAuthoredCodeReviews) - return `${presenceIcon} ${errorIcon} $(pullflow-icon)` + return `${errorIcon} ${presenceIcon} $(pullflow-icon)` const pendingCodeReviewsCount = pendingUserCodeReviews?.length || 0 const authoredCodeReviewsCount = userAuthoredCodeReviews?.length || 0 @@ -124,10 +124,10 @@ function getStatusBarText({ userAuthoredCodeReviews?.map( (codeReview) => `$(${PullRequestIcons.getIcon(codeReview.botReaction)})` ) || [] - return `${presenceIcon} ${pendingCodeReviewIcons.join( + return `${errorIcon} ${presenceIcon} ${pendingCodeReviewIcons.join( '' - )} ${errorIcon} $(pullflow-icon) ${authoredCodeReviewIcons.join('')}` + )} $(pullflow-icon) ${authoredCodeReviewIcons.join('')}` } else { - return `${presenceIcon} ${pendingCodeReviewsCount} ${errorIcon} $(pullflow-icon) ${authoredCodeReviewsCount}` + return `${errorIcon} ${presenceIcon} ${pendingCodeReviewsCount} $(pullflow-icon) ${authoredCodeReviewsCount}` } } From e393ee9e918275b5a2e4a07f217022671403ebc0 Mon Sep 17 00:00:00 2001 From: hr-hassan-raza Date: Wed, 1 Nov 2023 18:03:41 +0500 Subject: [PATCH 13/17] added workflow for publishing to market place --- .github/workflows/publish.yml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..9971cb9 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,34 @@ +name: Publish to VS Code Marketplace +on: + push: + branches: [main] +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Setup Node version + uses: actions/setup-node@v1 + with: + node-version: 16 + + - uses: actions/checkout@v2 + + - name: Make envfile + uses: SpicyPizza/create-envfile@v1.3 + with: + envkey_SESSIONS_SECRET_KEY: ${{ secrets.SESSION_SECRET_KEY }} + envkey_CLIENT_IDENTIFIER: com.pullflow.vscode + envkey_PULLFLOW_APP_URL: https://app.pullflow.com + + - name: Build, compile and test + run: | + yarn + yarn compile + yarn lint + yarn test + + - name: publish + run: | + yarn global add vsce + vsce publish -p ${{ secrets.VSCE_ACCESS_TOKEN }} \ No newline at end of file From 1ee00ce609e87eeb52b576528cfa9b5011bece64 Mon Sep 17 00:00:00 2001 From: hr-hassan-raza Date: Wed, 1 Nov 2023 22:38:36 +0500 Subject: [PATCH 14/17] moved styles to root --- src/views/webviews/welcome/welcome.ts | 5 +---- {src/views/webviews/welcome => styles}/welcome.css | 0 2 files changed, 1 insertion(+), 4 deletions(-) rename {src/views/webviews/welcome => styles}/welcome.css (100%) diff --git a/src/views/webviews/welcome/welcome.ts b/src/views/webviews/welcome/welcome.ts index 89e9110..de53c03 100644 --- a/src/views/webviews/welcome/welcome.ts +++ b/src/views/webviews/welcome/welcome.ts @@ -23,10 +23,7 @@ export const Welcome = { Uri.joinPath(context.extensionUri, 'assets') ) const stylePath = webview.asWebviewUri( - Uri.joinPath( - context.extensionUri, - 'src/views/webviews/welcome/welcome.css' - ) + Uri.joinPath(context.extensionUri, 'styles/welcome.css') ) return ` diff --git a/src/views/webviews/welcome/welcome.css b/styles/welcome.css similarity index 100% rename from src/views/webviews/welcome/welcome.css rename to styles/welcome.css From a9c75a9854cdc8c2b99e545b3b01a9d5c883fa1a Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Mon, 6 Nov 2023 17:17:50 +0500 Subject: [PATCH 15/17] minor html and css changes --- src/views/webviews/welcome/welcome.ts | 35 ++++++++++++--------------- styles/welcome.css | 13 +--------- 2 files changed, 17 insertions(+), 31 deletions(-) diff --git a/src/views/webviews/welcome/welcome.ts b/src/views/webviews/welcome/welcome.ts index de53c03..6b97488 100644 --- a/src/views/webviews/welcome/welcome.ts +++ b/src/views/webviews/welcome/welcome.ts @@ -50,10 +50,8 @@ export const Welcome = { some of the most innovative dev teams, including Epic Games, Avenue, Hear.com, and RedwoodJS.

- It offers seamless integration with your Slack and GitHub accounts. Simply - authenticate your accounts within Pullflow, and the - synchronization will be automatically established. New to Pullflow? Sign - In + Sign in to your accounts with Pullflow to enable two-sync between GitHub and Slack. New to Pullflow? Sign up for free.

@@ -62,11 +60,11 @@ export const Welcome = {

Supercharge your workflow with Pullflow for VS Code

    -

    ●   Effortlessly communicate across GitHub, Slack, and VS Code.

    -

    ●   Engage in meaningful conversations with contextual AI during PR discussions.

    -

    ●   Stay fully engaged in your ongoing code reviews.

    -

    ●   Stay updated in real-time on CI/CD and Automation.

    -

    ●   Execute actions on your code reviews using natural language.

    +
  •    Effortlessly communicate across GitHub, Slack, and VS Code.
  • +
  •    Engage in meaningful conversations with contextual AI during PR discussions.
  • +
  •    Stay fully engaged in your ongoing code reviews.
  • +
  •    Stay updated in real-time on CI/CD and Automation.
  • +
  •    Execute actions on your code reviews using natural language.
@@ -82,13 +80,13 @@ export const Welcome = {

The extension comes with a set of actions designed to help you take care of your code review tasks and return to your flow state. Actions you can take on pull request from VS Code are:

    -
  •   Open in Slack
  • -
  •   Open in GitHub
  • -
  •   Send message to author/reviewer on Slack
  • -
  •   Approve pull request
  • -
  •   Add labels on pull requests
  • -
  •   Add reviewers on pull requests
  • -
  •   Add assignees on pull requests
  • +
  •   Open in Slack
  • +
  •   Open in GitHub
  • +
  •   Send message to author/reviewer on Slack
  • +
  •   Approve pull request
  • +
  •   Add labels on pull requests
  • +
  •   Add reviewers on pull requests
  • +
  •   Add assignees on pull requests
PR-Chat-Image @@ -154,9 +152,8 @@ export const Welcome = {
- This tool is designed by IDE-integration team at Pullflow for developers seeking a unified workspace that reduces - context-switching and enhances productivity by integrating codebase management, code review, and team - communication into a single interface. + The Pullflow team created this tool to help developers work more efficiently. It combines code management, + review, and team chat in one place, so you don't have to switch between different apps.
diff --git a/styles/welcome.css b/styles/welcome.css index b675f83..4aed314 100644 --- a/styles/welcome.css +++ b/styles/welcome.css @@ -1,7 +1,3 @@ -body { - font-family: Arial, sans-serif; -} - header { margin-top: 20px; } @@ -30,20 +26,14 @@ header img { } #desc { - color: #f6f4f9; margin: 5px; font-size: 1.0em; } #intro p { - color: #c2c9d3; line-height: 1.5; } -#intro strong { - color: #ffffff; -} - #main-img { width: 100%; height: auto; @@ -51,7 +41,6 @@ header img { } h3 { - color: #f6f4f9; font-size: 1.5em; margin-bottom: 10px; } @@ -67,7 +56,6 @@ tbody tr { td { padding: 10px; - color: #c2c9d3; } #vs-code-icon { @@ -89,4 +77,5 @@ td { margin-top: 20px; line-height: 1.5; margin-bottom: 15px; + color: #64748b } \ No newline at end of file From 3dc1de6284776355855affa600e66661fdd96b4a Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Tue, 7 Nov 2023 02:47:12 +0500 Subject: [PATCH 16/17] ref: changed login command to sign in --- README.md | 2 +- package.json | 4 ++-- src/commands/{login.ts => signIn.ts} | 6 +++--- src/extension.ts | 6 ++++-- src/utils/commands.ts | 2 +- src/views/statusBar/statusBar.ts | 2 +- src/views/webviews/welcome/welcome.ts | 2 +- 7 files changed, 13 insertions(+), 11 deletions(-) rename src/commands/{login.ts => signIn.ts} (84%) diff --git a/README.md b/README.md index 5b49cd5..3b9a122 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The **Pullflow VS Code extension** brings all your code review workflows and col --- 1. **Installation**: Install the “Pullflow” extension from the Visual Studio Marketplace or Open VSX Registry. -2. **Login**: Click on “Sign in to Pullflow” from the VS Code status bar. +2. **Sign in**: Click on “Sign in to Pullflow” from the VS Code status bar. 3. **Ready to use**: The extension is now ready to use ✨ ## Key Features diff --git a/package.json b/package.json index 40f2f0b..2194939 100644 --- a/package.json +++ b/package.json @@ -44,8 +44,8 @@ "title": "Pullflow: Active Pull Requests" }, { - "command": "pullflow.login", - "title": "Pullflow: Login" + "command": "pullflow.signIn", + "title": "Pullflow: Sign in" }, { "command": "pullflow.logout", diff --git a/src/commands/login.ts b/src/commands/signIn.ts similarity index 84% rename from src/commands/login.ts rename to src/commands/signIn.ts index b7dfc79..ed2110f 100644 --- a/src/commands/login.ts +++ b/src/commands/signIn.ts @@ -5,7 +5,7 @@ import { initialize } from '../utils/initialize' const SIGN_IN_TIME_OUT = 120000 // sign in time out in ms -export const Login = async ({ +export const SignIn = async ({ context, statusBar, }: { @@ -13,11 +13,11 @@ export const Login = async ({ statusBar: StatusBarItem }) => { const redirectUri = `${env.uriScheme}://${context.extension.packageJSON.publisher}.${context.extension.packageJSON.name}` - const loginUrl = AppConfig.pullflow.baseUrl + const signInUrl = AppConfig.pullflow.baseUrl env.openExternal( Uri.parse( - `${loginUrl}/?clientIdentifier=${AppConfig.app.clientIdentifier}&clientUri=${redirectUri}` + `${signInUrl}/?clientIdentifier=${AppConfig.app.clientIdentifier}&clientUri=${redirectUri}` ) ) const user = await Authorization.waitForUser(context, SIGN_IN_TIME_OUT) diff --git a/src/extension.ts b/src/extension.ts index b5a7f3c..001b4ee 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,6 +1,6 @@ import { ExtensionContext, commands, StatusBarItem, window, Uri } from 'vscode' import { log } from './utils/logger' -import { Login } from './commands/login' +import { SignIn } from './commands/signIn' import { StatusBar } from './views/statusBar/statusBar' import { Command } from './utils' import { initialize } from './utils/initialize' @@ -44,7 +44,9 @@ export async function activate(context: ExtensionContext) { }) context.subscriptions.push( - commands.registerCommand(Command.login, () => Login({ context, statusBar })) + commands.registerCommand(Command.signIn, () => + SignIn({ context, statusBar }) + ) ) context.subscriptions.push( commands.registerCommand(Command.logout, () => diff --git a/src/utils/commands.ts b/src/utils/commands.ts index 076fb44..dfdab0a 100644 --- a/src/utils/commands.ts +++ b/src/utils/commands.ts @@ -1,5 +1,5 @@ export const Command = { - login: 'pullflow.login', + signIn: 'pullflow.signIn', activePullRequests: 'pullflow.active-pull-requests', logout: 'pullflow.logout', reconnect: 'pullflow.reconnect', diff --git a/src/views/statusBar/statusBar.ts b/src/views/statusBar/statusBar.ts index d1fa81b..85d35e8 100644 --- a/src/views/statusBar/statusBar.ts +++ b/src/views/statusBar/statusBar.ts @@ -26,7 +26,7 @@ const statusBarProperties = { tooltip: 'Pullflow - Active Pull Requests', }, signedOut: { - command: Command.login, + command: Command.signIn, backgroundColor: new ThemeColor(Theme.statusBar.error), text: '⚠ Sign in to Pullflow', tooltip: 'Sign in to Pullflow account', diff --git a/src/views/webviews/welcome/welcome.ts b/src/views/webviews/welcome/welcome.ts index 6b97488..9f3aa03 100644 --- a/src/views/webviews/welcome/welcome.ts +++ b/src/views/webviews/welcome/welcome.ts @@ -117,7 +117,7 @@ export const Welcome = {
- + From f2a4e8b61f768ca1fc67f787270d560d7d4aac0c Mon Sep 17 00:00:00 2001 From: hassan-pullflow Date: Tue, 7 Nov 2023 03:15:13 +0500 Subject: [PATCH 17/17] renamed logout to sign out --- package.json | 4 ++-- src/commands/reconnect.ts | 2 +- src/commands/{logout.ts => signOut.ts} | 2 +- src/extension.ts | 6 +++--- src/utils/commands.ts | 2 +- src/utils/initialize.ts | 2 +- src/utils/pullRequestsState.ts | 2 +- src/views/webviews/welcome/welcome.ts | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) rename src/commands/{logout.ts => signOut.ts} (97%) diff --git a/package.json b/package.json index 2194939..99f43fe 100644 --- a/package.json +++ b/package.json @@ -48,8 +48,8 @@ "title": "Pullflow: Sign in" }, { - "command": "pullflow.logout", - "title": "Pullflow: Logout" + "command": "pullflow.signOut", + "title": "Pullflow: Sign out" }, { "command": "pullflow.reconnect", diff --git a/src/commands/reconnect.ts b/src/commands/reconnect.ts index 51f24b9..886cf04 100644 --- a/src/commands/reconnect.ts +++ b/src/commands/reconnect.ts @@ -29,7 +29,7 @@ export const Reconnect = async ( if (codeReviews.requireRelogin) { log.error(codeReviews.error, module) window.showInformationMessage(`Pullflow: Please login again`) - commands.executeCommand(Command.logout) + commands.executeCommand(Command.signOut) return } diff --git a/src/commands/logout.ts b/src/commands/signOut.ts similarity index 97% rename from src/commands/logout.ts rename to src/commands/signOut.ts index a207d6a..63b9549 100644 --- a/src/commands/logout.ts +++ b/src/commands/signOut.ts @@ -4,7 +4,7 @@ import { StatusBar } from '../views/statusBar/statusBar' import { StatusBarState } from '../utils' import { Store } from '../utils/store' -export const Logout = async ({ +export const SignOut = async ({ context, statusBar, pollIntervalId, diff --git a/src/extension.ts b/src/extension.ts index 001b4ee..c9f3913 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -6,7 +6,7 @@ import { Command } from './utils' import { initialize } from './utils/initialize' import { Store } from './utils/store' import { Reconnect } from './commands/reconnect' -import { Logout } from './commands/logout' +import { SignOut } from './commands/signOut' import { ActivePullRequests } from './commands/activePullRequests' import { Authorization } from './utils/authorization' import { ToggleFlowState } from './commands/toggleFlowState' @@ -49,8 +49,8 @@ export async function activate(context: ExtensionContext) { ) ) context.subscriptions.push( - commands.registerCommand(Command.logout, () => - Logout({ + commands.registerCommand(Command.signOut, () => + SignOut({ context, statusBar, pollIntervalId, diff --git a/src/utils/commands.ts b/src/utils/commands.ts index dfdab0a..3af80e9 100644 --- a/src/utils/commands.ts +++ b/src/utils/commands.ts @@ -1,7 +1,7 @@ export const Command = { signIn: 'pullflow.signIn', activePullRequests: 'pullflow.active-pull-requests', - logout: 'pullflow.logout', + signOut: 'pullflow.signOut', reconnect: 'pullflow.reconnect', toggleFlowState: 'pullflow.toggle-flow-state', welcomeView: 'pullflow.welcome-view', diff --git a/src/utils/initialize.ts b/src/utils/initialize.ts index 388e030..3cb6088 100644 --- a/src/utils/initialize.ts +++ b/src/utils/initialize.ts @@ -107,7 +107,7 @@ const setSpaceUsers = async ({ window.showInformationMessage( `Error in fetching space users ${spaceUsers.error || spaceUsers.message}` ) - commands.executeCommand(Command.logout) + commands.executeCommand(Command.signOut) return } diff --git a/src/utils/pullRequestsState.ts b/src/utils/pullRequestsState.ts index 44a9941..3fb6e82 100644 --- a/src/utils/pullRequestsState.ts +++ b/src/utils/pullRequestsState.ts @@ -43,7 +43,7 @@ export const PullRequestState = { if (codeReviews.requireRelogin) { log.error(codeReviews.error, module) window.showInformationMessage(`Pullflow: Please login again`) - commands.executeCommand(Command.logout) + commands.executeCommand(Command.signOut) return } diff --git a/src/views/webviews/welcome/welcome.ts b/src/views/webviews/welcome/welcome.ts index 9f3aa03..79fd74a 100644 --- a/src/views/webviews/welcome/welcome.ts +++ b/src/views/webviews/welcome/welcome.ts @@ -120,7 +120,7 @@ export const Welcome = { - +
Pullflow: Active Pull Requests (ctrl/cmd+Shift+,)Pullflow: Active Pull Requests (Ctrl/Cmd+Shift+,)
Pullflow: LoginPullflow: Active Pull Requests (Ctrl/Cmd+Shift+,)
Pullflow: LoginPullflow: Sign in
Pullflow: LogoutPullflow: Sign in
Pullflow: LogoutPullflow: Sign out
Pullflow: Reconnect