From b115bb34ca7fd81619f82f1c0ece8a13e08428e1 Mon Sep 17 00:00:00 2001 From: vaidankarswapnil <81285216+vaidankarswapnil@users.noreply.github.com> Date: Thu, 15 Jul 2021 20:14:25 +0530 Subject: [PATCH] Fix GitHub repos panel issues (#875) Co-authored-by: Steve Faulkner Co-authored-by: Tanuj Mittal --- .../Controls/GitHub/GitHubReposComponent.tsx | 2 +- .../SettingsComponent.test.tsx.snap | 18 +++++ .../CommandBarComponentButtonFactory.tsx | 8 ++- src/Explorer/Notebook/NotebookManager.tsx | 23 +++--- .../GitHubReposPanel/GitHubReposPanel.tsx | 70 ++++++++----------- .../GitHubReposPanel.test.tsx.snap | 9 +++ .../StringInputPane.test.tsx.snap | 9 +++ src/Explorer/Tree/ResourceTreeAdapter.tsx | 8 ++- 8 files changed, 94 insertions(+), 53 deletions(-) diff --git a/src/Explorer/Controls/GitHub/GitHubReposComponent.tsx b/src/Explorer/Controls/GitHub/GitHubReposComponent.tsx index 29e1a2900..d6b28775d 100644 --- a/src/Explorer/Controls/GitHub/GitHubReposComponent.tsx +++ b/src/Explorer/Controls/GitHub/GitHubReposComponent.tsx @@ -56,7 +56,7 @@ export class GitHubReposComponent extends React.Component -
{content}
+
{content}
{!this.props.showAuthorizeAccess && ( <>
diff --git a/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap b/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap index cb8ecbfaf..edb2e91db 100644 --- a/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap +++ b/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap @@ -42,6 +42,15 @@ exports[`SettingsComponent renders 1`] = ` "resourceTree": ResourceTreeAdapter { "container": [Circular], "copyNotebook": [Function], + "gitHubOAuthService": GitHubOAuthService { + "junoClient": JunoClient { + "cachedPinnedRepos": [Function], + }, + "token": [Function], + }, + "junoClient": JunoClient { + "cachedPinnedRepos": [Function], + }, "parameters": [Function], }, "resourceTreeForResourceToken": ResourceTreeAdapterForResourceToken { @@ -113,6 +122,15 @@ exports[`SettingsComponent renders 1`] = ` "resourceTree": ResourceTreeAdapter { "container": [Circular], "copyNotebook": [Function], + "gitHubOAuthService": GitHubOAuthService { + "junoClient": JunoClient { + "cachedPinnedRepos": [Function], + }, + "token": [Function], + }, + "junoClient": JunoClient { + "cachedPinnedRepos": [Function], + }, "parameters": [Function], }, "resourceTreeForResourceToken": ResourceTreeAdapterForResourceToken { diff --git a/src/Explorer/Menus/CommandBar/CommandBarComponentButtonFactory.tsx b/src/Explorer/Menus/CommandBar/CommandBarComponentButtonFactory.tsx index 73e085aac..305c5e899 100644 --- a/src/Explorer/Menus/CommandBar/CommandBarComponentButtonFactory.tsx +++ b/src/Explorer/Menus/CommandBar/CommandBarComponentButtonFactory.tsx @@ -22,6 +22,7 @@ import * as Constants from "../../../Common/Constants"; import { configContext, Platform } from "../../../ConfigContext"; import * as ViewModels from "../../../Contracts/ViewModels"; import { useSidePanel } from "../../../hooks/useSidePanel"; +import { JunoClient } from "../../../Juno/JunoClient"; import { userContext } from "../../../UserContext"; import { getCollectionName, getDatabaseName } from "../../../Utils/APITypeUtils"; import { isServerlessAccount } from "../../../Utils/CapabilityUtils"; @@ -560,6 +561,7 @@ function createNotebookWorkspaceResetButton(container: Explorer): CommandButtonC function createManageGitHubAccountButton(container: Explorer): CommandButtonComponentProps { const connectedToGitHub: boolean = container.notebookManager?.gitHubOAuthService.isLoggedIn(); const label = connectedToGitHub ? "Manage GitHub settings" : "Connect to GitHub"; + const junoClient = new JunoClient(); return { iconSrc: GitHubIcon, iconAlt: label, @@ -568,7 +570,11 @@ function createManageGitHubAccountButton(container: Explorer): CommandButtonComp .getState() .openSidePanel( label, - + ), commandButtonLabel: label, hasPopup: false, diff --git a/src/Explorer/Notebook/NotebookManager.tsx b/src/Explorer/Notebook/NotebookManager.tsx index 22e384276..989cd39d1 100644 --- a/src/Explorer/Notebook/NotebookManager.tsx +++ b/src/Explorer/Notebook/NotebookManager.tsx @@ -89,16 +89,18 @@ export default class NotebookManager { this.gitHubClient.setToken(token?.access_token); if (this?.gitHubOAuthService.isLoggedIn()) { useSidePanel.getState().closeSidePanel(); - useSidePanel - .getState() - .openSidePanel( - "Manage GitHub settings", - - ); + setTimeout(() => { + useSidePanel + .getState() + .openSidePanel( + "Manage GitHub settings", + + ); + }, 200); } this.params.refreshCommandBarButtons(); @@ -179,6 +181,7 @@ export default class NotebookManager { ), "Cancel", diff --git a/src/Explorer/Panes/GitHubReposPanel/GitHubReposPanel.tsx b/src/Explorer/Panes/GitHubReposPanel/GitHubReposPanel.tsx index d2d3acac7..dfa8667db 100644 --- a/src/Explorer/Panes/GitHubReposPanel/GitHubReposPanel.tsx +++ b/src/Explorer/Panes/GitHubReposPanel/GitHubReposPanel.tsx @@ -23,7 +23,7 @@ import { PanelLoadingScreen } from "../PanelLoadingScreen"; interface IGitHubReposPanelProps { explorer: Explorer; gitHubClientProp: GitHubClient; - junoClientProp?: JunoClient; + junoClientProp: JunoClient; } interface IGitHubReposPanelState { @@ -120,6 +120,7 @@ export class GitHubReposPanel extends React.Component => this.loadMoreBranches(item.repo), }; - this.setState({ - gitHubReposState: { - ...this.state.gitHubReposState, - reposListProps: { - ...this.state.gitHubReposState.reposListProps, - branchesProps: { - ...this.state.gitHubReposState.reposListProps.branchesProps, - [GitHubUtils.toRepoFullName(item.repo.owner, item.repo.name)]: this.branchesProps[item.key], - }, - pinnedReposProps: { - repos: this.pinnedReposProps.repos, - }, - unpinnedReposProps: { - ...this.state.gitHubReposState.reposListProps.unpinnedReposProps, - repos: this.unpinnedReposProps.repos, - }, - }, - }, - }); this.loadMoreBranches(item.repo); - } else { - if (this.isAddedRepo === false) { - this.setState({ - gitHubReposState: { - ...this.state.gitHubReposState, - reposListProps: { - ...this.state.gitHubReposState.reposListProps, - pinnedReposProps: { - repos: this.pinnedReposProps.repos, - }, - unpinnedReposProps: { - ...this.state.gitHubReposState.reposListProps.unpinnedReposProps, - repos: this.unpinnedReposProps.repos, - }, - }, - }, - }); - } } }); + + this.setState({ + gitHubReposState: { + ...this.state.gitHubReposState, + reposListProps: { + ...this.state.gitHubReposState.reposListProps, + branchesProps: { + ...this.branchesProps, + }, + pinnedReposProps: { + repos: this.pinnedReposProps.repos, + }, + unpinnedReposProps: { + ...this.state.gitHubReposState.reposListProps.unpinnedReposProps, + repos: this.unpinnedReposProps.repos, + }, + }, + }, + }); this.isAddedRepo = false; } diff --git a/src/Explorer/Panes/GitHubReposPanel/__snapshots__/GitHubReposPanel.test.tsx.snap b/src/Explorer/Panes/GitHubReposPanel/__snapshots__/GitHubReposPanel.test.tsx.snap index 9d1b8cc0c..f1c03499b 100644 --- a/src/Explorer/Panes/GitHubReposPanel/__snapshots__/GitHubReposPanel.test.tsx.snap +++ b/src/Explorer/Panes/GitHubReposPanel/__snapshots__/GitHubReposPanel.test.tsx.snap @@ -31,6 +31,15 @@ exports[`GitHub Repos Panel should render Default properly 1`] = ` "resourceTree": ResourceTreeAdapter { "container": [Circular], "copyNotebook": [Function], + "gitHubOAuthService": GitHubOAuthService { + "junoClient": JunoClient { + "cachedPinnedRepos": [Function], + }, + "token": [Function], + }, + "junoClient": JunoClient { + "cachedPinnedRepos": [Function], + }, "parameters": [Function], }, "resourceTreeForResourceToken": ResourceTreeAdapterForResourceToken { diff --git a/src/Explorer/Panes/StringInputPane/__snapshots__/StringInputPane.test.tsx.snap b/src/Explorer/Panes/StringInputPane/__snapshots__/StringInputPane.test.tsx.snap index 27f1f941d..e159e0052 100644 --- a/src/Explorer/Panes/StringInputPane/__snapshots__/StringInputPane.test.tsx.snap +++ b/src/Explorer/Panes/StringInputPane/__snapshots__/StringInputPane.test.tsx.snap @@ -21,6 +21,15 @@ exports[`StringInput Pane should render Create new directory properly 1`] = ` "resourceTree": ResourceTreeAdapter { "container": [Circular], "copyNotebook": [Function], + "gitHubOAuthService": GitHubOAuthService { + "junoClient": JunoClient { + "cachedPinnedRepos": [Function], + }, + "token": [Function], + }, + "junoClient": JunoClient { + "cachedPinnedRepos": [Function], + }, "parameters": [Function], }, "resourceTreeForResourceToken": ResourceTreeAdapterForResourceToken { diff --git a/src/Explorer/Tree/ResourceTreeAdapter.tsx b/src/Explorer/Tree/ResourceTreeAdapter.tsx index 2513a23be..85b6f4a53 100644 --- a/src/Explorer/Tree/ResourceTreeAdapter.tsx +++ b/src/Explorer/Tree/ResourceTreeAdapter.tsx @@ -16,9 +16,10 @@ import { Areas } from "../../Common/Constants"; import { isPublicInternetAccessAllowed } from "../../Common/DatabaseAccountUtility"; import * as DataModels from "../../Contracts/DataModels"; import * as ViewModels from "../../Contracts/ViewModels"; +import { GitHubOAuthService } from "../../GitHub/GitHubOAuthService"; import { useSidePanel } from "../../hooks/useSidePanel"; import { useTabs } from "../../hooks/useTabs"; -import { IPinnedRepo } from "../../Juno/JunoClient"; +import { IPinnedRepo, JunoClient } from "../../Juno/JunoClient"; import { LocalStorageUtility, StorageKey } from "../../Shared/StorageUtility"; import { Action, ActionModifiers, Source } from "../../Shared/Telemetry/TelemetryConstants"; import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; @@ -55,6 +56,8 @@ export class ResourceTreeAdapter implements ReactAdapter { public galleryContentRoot: NotebookContentItem; public myNotebooksContentRoot: NotebookContentItem; public gitHubNotebooksContentRoot: NotebookContentItem; + public junoClient: JunoClient; + public gitHubOAuthService: GitHubOAuthService; public constructor(private container: Explorer) { this.parameters = ko.observable(Date.now()); @@ -71,6 +74,8 @@ export class ResourceTreeAdapter implements ReactAdapter { useDatabases.subscribe(() => this.triggerRender()); this.triggerRender(); + this.junoClient = new JunoClient(); + this.gitHubOAuthService = new GitHubOAuthService(this.junoClient); } private traceMyNotebookTreeInfo() { @@ -634,6 +639,7 @@ export class ResourceTreeAdapter implements ReactAdapter { ), },