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 ? : -
- { - await LocalStorage.setItem("default_organization", values["default_organization"]); - const toast = await showToast({ - title: "Saving default organization", - style: Toast.Style.Animated - }) - revalidate && await revalidate(); - setTimeout(() => { - toast.hide() - pop(); - }, 2000); - }} /> - - } > - - { data.length === 0 ? : - data?.map((org) => )} - - - ) -} \ No newline at end of file + if (isUnauthorised || isNetworkError) { + return + } + + return ( + (defaultPrefValue && data.length > 0) && (
+ { + await LocalStorage.setItem("default_organization", values["default_organization"]); + const toast = await showToast({ + title: "Saving default organization", + style: Toast.Style.Animated + }) + revalidate && await revalidate(); + setTimeout(() => { + toast.hide() + pop(); + }, 1000); + }} /> + + } > + + {data.map(org => )} + + ) + ) +} 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();