From 1ac234f11b7fe7ea7d33a4c56bdd8f36cfc06a43 Mon Sep 17 00:00:00 2001
From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com>
Date: Tue, 8 Aug 2023 10:14:33 +0530
Subject: [PATCH 1/2] one place to start/create workspaces
---
src/components/BranchListItem.tsx | 23 ++++++++-------
src/components/IssueListItem.tsx | 25 ++++++++--------
src/components/PullRequestListItem.tsx | 24 +++++----------
src/components/RepositoryListItem.tsx | 25 ++++++++--------
src/helpers/createWorkspaceFromContext.tsx | 3 +-
.../{openInGitpod.ts => openInGitpod.tsx} | 29 +++++++++++++++++--
src/preferences/context_preferences.tsx | 9 +-----
7 files changed, 74 insertions(+), 64 deletions(-)
rename src/helpers/{openInGitpod.ts => openInGitpod.tsx} (74%)
diff --git a/src/components/BranchListItem.tsx b/src/components/BranchListItem.tsx
index d269993..ec3259d 100644
--- a/src/components/BranchListItem.tsx
+++ b/src/components/BranchListItem.tsx
@@ -145,16 +145,17 @@ export default function BranchListItem({
title="Open Branch in Gitpod"
onAction={async () => {
visitBranch?.(branch, repository);
- if (dashboardPreferences.access_token) {
- const defaultOrg = await LocalStorage.getItem("default_organization");
- if (defaultOrg !== undefined && WorkspaceManager.api) {
- createWorksapceFromContext(defaultOrg.toString(),branchURL);
- } else {
- push()
- }
- } else {
- OpenInGitpod(branchURL, "Branch", repository, branch.branchName);
- }
+ OpenInGitpod(branchURL, "Branch", repository, push, branch.branchName);
+ // if (dashboardPreferences.access_token) {
+ // const defaultOrg = await LocalStorage.getItem("default_organization");
+ // if (defaultOrg !== undefined && WorkspaceManager.api) {
+ // createWorksapceFromContext(defaultOrg.toString(), branchURL);
+ // } else {
+ // push()
+ // }
+ // } else {
+ // OpenInGitpod(branchURL, "Branch", repository, branch.branchName);
+ // }
}}
shortcut={{ modifiers: ["cmd"], key: "g" }}
/>
@@ -228,7 +229,7 @@ export default function BranchListItem({
}
shortcut={{ modifiers: ["cmd"], key: "e" }}
/>
- }/>
+ } />
}
/>
diff --git a/src/components/IssueListItem.tsx b/src/components/IssueListItem.tsx
index e63e7ff..3e573b0 100644
--- a/src/components/IssueListItem.tsx
+++ b/src/components/IssueListItem.tsx
@@ -103,16 +103,17 @@ export default function IssueListItem({
title="Open Issue in Gitpod"
onAction={async () => {
visitIssue?.(issue);
- if (dashboardPreferences.access_token) {
- const defaultOrg = await LocalStorage.getItem("default_organization");
- if (defaultOrg !== undefined && WorkspaceManager.api) {
- createWorksapceFromContext(defaultOrg.toString(),issue.url);
- } else {
- push()
- }
- } else {
- OpenInGitpod(issue.url, "Issue", issue.repository.nameWithOwner, issue.title);
- }
+ OpenInGitpod(issue.url, "Issue", issue.repository.nameWithOwner, push, issue.title);
+ // if (dashboardPreferences.access_token) {
+ // const defaultOrg = await LocalStorage.getItem("default_organization");
+ // if (defaultOrg !== undefined && WorkspaceManager.api) {
+ // createWorksapceFromContext(defaultOrg.toString(),issue.url);
+ // } else {
+ // push()
+ // }
+ // } else {
+ // OpenInGitpod(issue.url, "Issue", issue.repository.nameWithOwner, issue.title);
+ // }
}}
shortcut={{ modifiers: ["cmd"], key: "g" }}
/>
@@ -148,7 +149,7 @@ export default function IssueListItem({
{!fromCache && (
{
+ onAction={async () => {
visitIssue?.(issue);
await showToast({
title: `Added Issue "#${issue.number}" to Recents`,
@@ -185,7 +186,7 @@ export default function IssueListItem({
}
shortcut={{ modifiers: ["cmd"], key: "e" }}
/>
- }/>
+ } />
}
/>
diff --git a/src/components/PullRequestListItem.tsx b/src/components/PullRequestListItem.tsx
index 97a2a7e..e39cbed 100644
--- a/src/components/PullRequestListItem.tsx
+++ b/src/components/PullRequestListItem.tsx
@@ -121,21 +121,13 @@ export default function PullRequestListItem({
title="Open PR in Gitpod"
onAction={async () => {
visitPullReq?.(pullRequest);
- if (dashboardPreferences.access_token) {
- const defaultOrg = await LocalStorage.getItem("default_organization");
- if (defaultOrg !== undefined && WorkspaceManager.api) {
- createWorksapceFromContext(defaultOrg.toString(), pullRequest.permalink);
- } else {
- push()
- }
- } else {
- OpenInGitpod(
- pullRequest.permalink,
- "Pull Request",
- pullRequest.repository.nameWithOwner,
- pullRequest.title
- );
- }
+ OpenInGitpod(
+ pullRequest.permalink,
+ "Pull Request",
+ pullRequest.repository.nameWithOwner,
+ push,
+ pullRequest.title,
+ );
}}
shortcut={{ modifiers: ["cmd"], key: "g" }}
/>
@@ -208,7 +200,7 @@ export default function PullRequestListItem({
}}
/>
)}
- }/>
+ } />
}
/>
diff --git a/src/components/RepositoryListItem.tsx b/src/components/RepositoryListItem.tsx
index 224f376..ef1232b 100644
--- a/src/components/RepositoryListItem.tsx
+++ b/src/components/RepositoryListItem.tsx
@@ -1,4 +1,4 @@
-import { Color, List, ActionPanel, Action, open, useNavigation, Icon, showToast, Toast, getPreferenceValues, LocalStorage} from "@raycast/api";
+import { Color, List, ActionPanel, Action, open, useNavigation, Icon, showToast, Toast, getPreferenceValues, LocalStorage } from "@raycast/api";
import { MutatePromise, usePromise } from "@raycast/utils";
import { GitpodIcons, UIColors } from "../../constants";
@@ -141,16 +141,17 @@ export default function RepositoryListItem({
title="Trigger Workspace"
onAction={async () => {
onVisit(repository);
- if (dashboardPreferences.access_token) {
- const defaultOrg = await LocalStorage.getItem("default_organization");
- if (defaultOrg !== undefined && WorkspaceManager.api) {
- createWorksapceFromContext(defaultOrg.toString(),repository.url);
- } else {
- push()
- }
- } else {
- OpenInGitpod(repository.url, "Repository", repository.nameWithOwner)
- }
+ OpenInGitpod(repository.url, "Repository", repository.nameWithOwner, push)
+ // if (dashboardPreferences.access_token) {
+ // const defaultOrg = await LocalStorage.getItem("default_organization");
+ // if (defaultOrg !== undefined && WorkspaceManager.api) {
+ // createWorksapceFromContext(defaultOrg.toString(), repository.url);
+ // } else {
+ // push()
+ // }
+ // } else {
+ // OpenInGitpod(repository.url, "Repository", repository.nameWithOwner)
+ // }
}}
shortcut={{ modifiers: ["cmd"], key: "g" }}
/>
@@ -161,7 +162,7 @@ export default function RepositoryListItem({
}
shortcut={{ modifiers: ["cmd"], key: "e" }}
/>
- }/>
+ } />
}
/>
diff --git a/src/helpers/createWorkspaceFromContext.tsx b/src/helpers/createWorkspaceFromContext.tsx
index d0142ba..70990fa 100644
--- a/src/helpers/createWorkspaceFromContext.tsx
+++ b/src/helpers/createWorkspaceFromContext.tsx
@@ -5,7 +5,6 @@ import { WorkspaceManager } from "../api/Gitpod/WorkspaceManager";
import { Preferences } from "../preferences/repository_preferences";
export default async function createWorksapceFromContext(defaultOrg: string,context_url: string) {
-
const EditorPreferences = getPreferenceValues();
IWorkspace.create(WorkspaceManager.api, {
@@ -28,4 +27,4 @@ export default async function createWorksapceFromContext(defaultOrg: string,cont
type: LaunchType.UserInitiated
})
}, 3000);
-}
\ No newline at end of file
+}
diff --git a/src/helpers/openInGitpod.ts b/src/helpers/openInGitpod.tsx
similarity index 74%
rename from src/helpers/openInGitpod.ts
rename to src/helpers/openInGitpod.tsx
index 67757c8..2af8582 100644
--- a/src/helpers/openInGitpod.ts
+++ b/src/helpers/openInGitpod.tsx
@@ -1,15 +1,19 @@
import { LocalStorage, open, showToast, Toast } from "@raycast/api";
import { getPreferenceValues } from "@raycast/api";
+import { WorkspaceManager } from "../api/Gitpod/WorkspaceManager";
+import DefaultOrgForm from "../components/DefaultOrgForm";
+import { dashboardPreferences } from "../preferences/dashboard_preferences";
import { getGitpodEndpoint } from "../preferences/gitpod_endpoint";
+import createWorksapceFromContext from "./createWorkspaceFromContext";
+
interface Preferences {
preferredEditor: string;
useLatest: boolean;
preferredEditorClass: "g1-standard" | "g1-large";
}
-
export async function getPreferencesForContext(
type: "Branch" | "Pull Request" | "Issue" | "Repository",
repository: string,
@@ -38,21 +42,40 @@ export async function getPreferencesForContext(
return preferences;
}
+async function createWorksapce(
+ contextUrl: string,
+ push: (jsx: JSX.Element) => void,
+) {
+ const defaultOrg = await LocalStorage.getItem("default_organization");
+ if (defaultOrg && WorkspaceManager.api) {
+ createWorksapceFromContext(defaultOrg.toString(), contextUrl);
+ } else {
+ push();
+ }
+}
+
export default async function OpenInGitpod(
contextUrl: string,
type: "Branch" | "Pull Request" | "Issue" | "Repository",
repository: string,
- context?: string
+ push: (jsx: JSX.Element) => void,
+ context?: string,
) {
const gitpodEndpoint = getGitpodEndpoint();
const preferences = await getPreferencesForContext(type, repository, context);
+ const dashboardPreferences = getPreferenceValues();
+ if (dashboardPreferences.access_token) {
+ return createWorksapce(contextUrl, push);
+ }
+
try {
- await showToast({
+ const toast = await showToast({
title: "Launching your workspace",
style: Toast.Style.Animated,
});
setTimeout(() => {
+ toast.hide();
if (preferences.preferredEditor === "ssh") {
// TODO: Add a check if dotsh files are loaded in future
open(
diff --git a/src/preferences/context_preferences.tsx b/src/preferences/context_preferences.tsx
index 5fd04be..daf38bd 100644
--- a/src/preferences/context_preferences.tsx
+++ b/src/preferences/context_preferences.tsx
@@ -90,14 +90,7 @@ export default function ContextPreferences({ repository, type, context, revalida
>
-
-
-
-
-
-
-
-
+
Date: Tue, 8 Aug 2023 11:10:12 +0530
Subject: [PATCH 2/2] fixed default loaded organization to match localstorage
---
src/components/DefaultOrgForm.tsx | 121 +++++++++++++-----------
src/preferences/context_preferences.tsx | 4 +-
2 files changed, 69 insertions(+), 56 deletions(-)
diff --git a/src/components/DefaultOrgForm.tsx b/src/components/DefaultOrgForm.tsx
index 7c8215d..9163c06 100644
--- a/src/components/DefaultOrgForm.tsx
+++ b/src/components/DefaultOrgForm.tsx
@@ -1,6 +1,6 @@
-import { Action, ActionPanel, Detail, Form, LocalStorage, Toast, getPreferenceValues, showToast, useNavigation } from "@raycast/api"
+import { Action, ActionPanel, Detail, Form, LocalStorage, Toast, getPreferenceValues, showToast, useNavigation, Preferences } from "@raycast/api"
import { usePromise } from "@raycast/utils"
-import { useState } from "react";
+import { useEffect, useState } from "react";
import { IOrganizationError } from "../api/Gitpod/Models/IOrganizationError";
import { IOrganization } from "../api/Gitpod/Models/IOrganizations"
@@ -9,64 +9,77 @@ import { dashboardPreferences } from "../preferences/dashboard_preferences";
import { ErrorListView, errorMessage } from "./errorListView";
interface defaultOrgParams {
- revalidate?: () => Promise;
+ revalidate?: () => Promise;
}
+export default function DefaultOrgForm({ revalidate }: defaultOrgParams) {
+ const preferences = getPreferenceValues();
-export default function DefaultOrgForm({revalidate} : defaultOrgParams) {
+ const { pop } = useNavigation();
- const preferences = getPreferenceValues();
+ const [defaultPrefValue, setDefaultPrefValue] = useState(undefined);
- const { pop } = useNavigation();
+ const [isUnauthorised, setIsUnauthorized] = useState(false);
+ const [isNetworkError, setNetworkError] = useState(false);
+ const [data, setData] = useState([])
- const [isUnauthorised, setIsUnauthorized] = useState(false);
- const [isNetworkError, setNetworkError] = useState(false);
- const [data, setData] = useState([])
-
- const { isLoading , error } = usePromise(async () => {
- const data = await IOrganization.fetchOrganization(preferences.access_token ?? "");
- setData(data)
- }, [], {
- onError: (error : Error) => {
- const e = ( error as any ) as {code: string }
- if (e.code === "ENOTFOUND"){
- setNetworkError(true);
- }
- const gitpodError = error as IOrganizationError;
- if (gitpodError.code === 401 || gitpodError.code === 500){
- setIsUnauthorized(true);
- }
- }
- })
+ useEffect(() => {
+ if (data) {
+ const loadDefaultValues = async () => {
+ const res = await LocalStorage.getItem("default_organization") as string;
+ setDefaultPrefValue(res);
+ };
+ loadDefaultValues();
+ }
+ }, [data]);
- if (isUnauthorised || isNetworkError){
- return
+ const { isLoading, error } = usePromise(async () => {
+ const data = await IOrganization.fetchOrganization(preferences.access_token ?? "");
+ setData(data)
+ }, [], {
+ onError: (error: Error) => {
+ const e = (error as any) as { code: string }
+ if (e.code === "ENOTFOUND") {
+ setNetworkError(true);
+ }
+ const gitpodError = error as IOrganizationError;
+ if (gitpodError.code === 401 || gitpodError.code === 500) {
+ setIsUnauthorized(true);
+ }
}
+ })
- return (
- error ? :
-
- )
-}
\ No newline at end of file
+ if (isUnauthorised || isNetworkError) {
+ return
+ }
+
+ return (
+ (defaultPrefValue && data.length > 0) && ()
+ )
+}
diff --git a/src/preferences/context_preferences.tsx b/src/preferences/context_preferences.tsx
index daf38bd..b671910 100644
--- a/src/preferences/context_preferences.tsx
+++ b/src/preferences/context_preferences.tsx
@@ -44,12 +44,12 @@ export default function ContextPreferences({ repository, type, context, revalida
const [defaultPrefValue, setDefaultPrefValue] = useState(null);
useEffect(() => {
- const getUsers = async () => {
+ const loadDefaultValues = async () => {
const res = await getDefaultValue(repository, context);
setDefaultPrefValue(res);
};
- getUsers();
+ loadDefaultValues();
}, []);
const { pop } = useNavigation();