Move GitHub repos panel to react (#638)

Co-authored-by: Steve Faulkner <southpolesteve@gmail.com>
This commit is contained in:
vaidankarswapnil 2021-05-04 06:26:47 +05:30 committed by GitHub
parent 4efacace16
commit 038f3ee684
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 6231 additions and 203 deletions

View File

@ -25,4 +25,3 @@ ko.components.register("graph-styling-pane", new PaneComponents.GraphStylingPane
ko.components.register("table-add-entity-pane", new PaneComponents.TableAddEntityPaneComponent());
ko.components.register("table-edit-entity-pane", new PaneComponents.TableEditEntityPaneComponent());
ko.components.register("cassandra-add-collection-pane", new PaneComponents.CassandraAddCollectionPaneComponent());
ko.components.register("github-repos-pane", new PaneComponents.GitHubReposPaneComponent());

View File

@ -23,8 +23,6 @@ export interface RepoListItem {
}
export class GitHubReposComponent extends React.Component<GitHubReposComponentProps> {
public static readonly ConnectToGitHubTitle = "Connect to GitHub";
public static readonly ManageGitHubRepoTitle = "Manage GitHub settings";
private static readonly ManageGitHubRepoDescription =
"Select your GitHub repos and branch(es) to pin to your notebooks workspace.";
private static readonly ManageGitHubRepoResetConnection = "View or change your GitHub authorization settings.";
@ -32,14 +30,6 @@ export class GitHubReposComponent extends React.Component<GitHubReposComponentPr
private static readonly CancelButtonText = "Cancel";
public render(): JSX.Element {
const header: JSX.Element = (
<p>
{this.props.showAuthorizeAccess
? GitHubReposComponent.ConnectToGitHubTitle
: GitHubReposComponent.ManageGitHubRepoTitle}
</p>
);
const content: JSX.Element = this.props.showAuthorizeAccess ? (
<AuthorizeAccessComponent {...this.props.authorizeAccessProps} />
) : (
@ -66,9 +56,6 @@ export class GitHubReposComponent extends React.Component<GitHubReposComponentPr
return (
<>
<div className={"firstdivbg headerline"} role="heading" aria-level={2}>
{header}
</div>
<div className={"paneMainContent"}>{content}</div>
{!this.props.showAuthorizeAccess && (
<>

View File

@ -1,19 +1,21 @@
import {
IStyleFunctionOrObject,
ICheckboxStyleProps,
ICheckboxStyles,
IDropdownStyles,
IDropdownStyleProps,
IDropdownStyles,
IStyleFunctionOrObject,
} from "office-ui-fabric-react";
export const ButtonsFooterStyle: React.CSSProperties = {
padding: 14,
paddingTop: 14,
height: "auto",
borderTop: "2px solid lightGray",
};
export const ContentFooterStyle: React.CSSProperties = {
padding: "10px 24px 10px 24px",
paddingTop: "10px",
height: "auto",
borderTop: "2px solid lightGray",
};
export const ChildrenMargin = 10;
@ -53,6 +55,11 @@ export const BranchesDropdownOptionContainerStyle: React.CSSProperties = {
padding: 8,
};
export const ContentMainStyle: React.CSSProperties = {
display: "flex",
flexDirection: "column",
};
export const ReposListRepoColumnMinWidth = 192;
export const ReposListBranchesColumnWidth = 116;
export const BranchesDropdownWidth = 200;

View File

@ -7,7 +7,7 @@ import _ from "underscore";
import { AuthType } from "../AuthType";
import { BindingHandlersRegisterer } from "../Bindings/BindingHandlersRegisterer";
import * as Constants from "../Common/Constants";
import { ExplorerMetrics } from "../Common/Constants";
import { ExplorerMetrics, HttpStatusCodes } from "../Common/Constants";
import { readCollection } from "../Common/dataAccess/readCollection";
import { readDatabases } from "../Common/dataAccess/readDatabases";
import { getErrorMessage, getErrorStack, handleError } from "../Common/ErrorHandlingUtils";
@ -19,7 +19,9 @@ import { configContext, Platform } from "../ConfigContext";
import * as DataModels from "../Contracts/DataModels";
import { MessageTypes } from "../Contracts/ExplorerContracts";
import * as ViewModels from "../Contracts/ViewModels";
import { IGalleryItem } from "../Juno/JunoClient";
import { GitHubClient } from "../GitHub/GitHubClient";
import { GitHubOAuthService } from "../GitHub/GitHubOAuthService";
import { IGalleryItem, JunoClient } from "../Juno/JunoClient";
import { NotebookWorkspaceManager } from "../NotebookWorkspaceManager/NotebookWorkspaceManager";
import { ResourceProviderClientFactory } from "../ResourceProvider/ResourceProviderClientFactory";
import { RouteHandler } from "../RouteHandlers/RouteHandler";
@ -57,6 +59,7 @@ import { ContextualPaneBase } from "./Panes/ContextualPaneBase";
import { DeleteCollectionConfirmationPane } from "./Panes/DeleteCollectionConfirmationPane/DeleteCollectionConfirmationPane";
import { DeleteDatabaseConfirmationPanel } from "./Panes/DeleteDatabaseConfirmationPanel";
import { ExecuteSprocParamsPane } from "./Panes/ExecuteSprocParamsPane/ExecuteSprocParamsPane";
import { GitHubReposPanel } from "./Panes/GitHubReposPanel/GitHubReposPanel";
import GraphStylingPane from "./Panes/GraphStylingPane";
import { LoadQueryPane } from "./Panes/LoadQueryPane/LoadQueryPane";
import { SaveQueryPane } from "./Panes/SaveQueryPane/SaveQueryPane";
@ -166,10 +169,11 @@ export default class Explorer {
public addCollectionPane: AddCollectionPane;
public graphStylingPane: GraphStylingPane;
public cassandraAddCollectionPane: CassandraAddCollectionPane;
public gitHubReposPane: ContextualPaneBase;
private gitHubClient: GitHubClient;
public gitHubOAuthService: GitHubOAuthService;
public junoClient: JunoClient;
// features
public isGitHubPaneEnabled: ko.Observable<boolean>;
public isPublishNotebookPaneEnabled: ko.Observable<boolean>;
public isHostedDataExplorerEnabled: ko.Computed<boolean>;
public isRightPanelV2Enabled: ko.Computed<boolean>;
@ -211,6 +215,8 @@ export default class Explorer {
private static readonly MaxNbDatabasesToAutoExpand = 5;
constructor(params?: ExplorerParams) {
this.gitHubClient = new GitHubClient(this.onGitHubClientError);
this.junoClient = new JunoClient();
this.setIsNotificationConsoleExpanded = params?.setIsNotificationConsoleExpanded;
this.setNotificationConsoleData = params?.setNotificationConsoleData;
this.setInProgressConsoleDataIdToBeDeleted = params?.setInProgressConsoleDataIdToBeDeleted;
@ -317,7 +323,6 @@ export default class Explorer {
this.resourceTokenCollectionId = ko.observable<string>();
this.resourceTokenCollection = ko.observable<ViewModels.CollectionBase>();
this.resourceTokenPartitionKey = ko.observable<string>();
this.isGitHubPaneEnabled = ko.observable<boolean>(false);
this.isMongoIndexingEnabled = ko.observable<boolean>(false);
this.isPublishNotebookPaneEnabled = ko.observable<boolean>(false);
@ -597,9 +602,6 @@ export default class Explorer {
refreshCommandBarButtons: () => this.refreshCommandBarButtons(),
refreshNotebookList: () => this.refreshNotebookList(),
});
this.gitHubReposPane = this.notebookManager.gitHubReposPane;
this.isGitHubPaneEnabled(true);
}
this.refreshCommandBarButtons();
@ -647,6 +649,23 @@ export default class Explorer {
}
}
private onGitHubClientError = (error: any): void => {
Logger.logError(getErrorMessage(error), "NotebookManager/onGitHubClientError");
if (error.status === HttpStatusCodes.Unauthorized) {
this.gitHubOAuthService.resetToken();
this.showOkCancelModalDialog(
undefined,
"Cosmos DB cannot access your Github account anymore. Please connect to GitHub again.",
"Connect to GitHub",
() => this.openGitHubReposPanel("Connect to GitHub"),
"Cancel",
undefined
);
}
};
public openEnableSynapseLinkDialog(): void {
const addSynapseLinkDialogProps: DialogProps = {
linkProps: {
@ -2138,6 +2157,19 @@ export default class Explorer {
);
}
public openGitHubReposPanel(header: string, junoClient?: JunoClient): void {
this.openSidePanel(
header,
<GitHubReposPanel
explorer={this}
closePanel={this.closeSidePanel}
gitHubClientProp={this.notebookManager.gitHubClient}
junoClientProp={junoClient}
openNotificationConsole={() => this.expandConsole()}
/>
);
}
public openAddTableEntityPanel(queryTablesTab: QueryTablesTab, tableEntityListViewModel: TableListViewModal): void {
this.openSidePanel(
"Add Table Entity",

View File

@ -19,11 +19,8 @@ import SettingsIcon from "../../../../images/settings_15x15.svg";
import SynapseIcon from "../../../../images/synapse-link.svg";
import { AuthType } from "../../../AuthType";
import * as Constants from "../../../Common/Constants";
import { Areas } from "../../../Common/Constants";
import { configContext, Platform } from "../../../ConfigContext";
import * as ViewModels from "../../../Contracts/ViewModels";
import { Action, ActionModifiers } from "../../../Shared/Telemetry/TelemetryConstants";
import * as TelemetryProcessor from "../../../Shared/Telemetry/TelemetryProcessor";
import { userContext } from "../../../UserContext";
import { CommandButtonComponentProps } from "../../Controls/CommandButton/CommandButtonComponent";
import Explorer from "../../Explorer";
@ -538,14 +535,7 @@ function createManageGitHubAccountButton(container: Explorer): CommandButtonComp
return {
iconSrc: GitHubIcon,
iconAlt: label,
onCommandClick: () => {
if (!connectedToGitHub) {
TelemetryProcessor.trace(Action.NotebooksGitHubConnect, ActionModifiers.Mark, {
dataExplorerArea: Areas.Notebook,
});
}
container.gitHubReposPane.open();
},
onCommandClick: () => container.openGitHubReposPanel(label),
commandButtonLabel: label,
hasPopup: false,
disabled: false,

View File

@ -21,7 +21,7 @@ import { getFullName } from "../../Utils/UserUtils";
import Explorer from "../Explorer";
import { ContextualPaneBase } from "../Panes/ContextualPaneBase";
import { CopyNotebookPane } from "../Panes/CopyNotebookPane/CopyNotebookPane";
import { GitHubReposPane } from "../Panes/GitHubReposPane";
// import { GitHubReposPane } from "../Panes/GitHubReposPane";
import { PublishNotebookPane } from "../Panes/PublishNotebookPane/PublishNotebookPane";
import { ResourceTreeAdapter } from "../Tree/ResourceTreeAdapter";
import { NotebookContentProvider } from "./NotebookComponent/NotebookContentProvider";
@ -50,7 +50,7 @@ export default class NotebookManager {
private gitHubContentProvider: GitHubContentProvider;
public gitHubOAuthService: GitHubOAuthService;
private gitHubClient: GitHubClient;
public gitHubClient: GitHubClient;
public gitHubReposPane: ContextualPaneBase;
@ -60,13 +60,6 @@ export default class NotebookManager {
this.gitHubOAuthService = new GitHubOAuthService(this.junoClient);
this.gitHubClient = new GitHubClient(this.onGitHubClientError);
this.gitHubReposPane = new GitHubReposPane({
id: "gitHubReposPane",
visible: ko.observable<boolean>(false),
container: this.params.container,
junoClient: this.junoClient,
gitHubClient: this.gitHubClient,
});
this.gitHubContentProvider = new GitHubContentProvider({
gitHubClient: this.gitHubClient,
@ -92,9 +85,9 @@ export default class NotebookManager {
this.gitHubOAuthService.getTokenObservable().subscribe((token) => {
this.gitHubClient.setToken(token?.access_token);
if (this.gitHubReposPane.visible()) {
this.gitHubReposPane.open();
if (this?.gitHubOAuthService.isLoggedIn()) {
this.params.container.closeSidePanel();
this.params.container.openGitHubReposPanel("Manager GitHub settings", this.junoClient);
}
this.params.refreshCommandBarButtons();
@ -163,7 +156,7 @@ export default class NotebookManager {
undefined,
"Cosmos DB cannot access your Github account anymore. Please connect to GitHub again.",
"Connect to GitHub",
() => this.gitHubReposPane.open(),
() => this.params.container.openGitHubReposPanel("Connect to GitHub"),
"Cancel",
undefined
);

View File

@ -1,14 +0,0 @@
<div data-bind="visible: visible, event: { keydown: onPaneKeyDown }">
<div class="contextual-pane-out" data-bind="click: cancel, clickBubble: false"></div>
<div class="contextual-pane" id="gitHubReposPane">
<div class="contextual-pane-in">
<div class="paneContentContainer" data-bind="react: gitHubReposAdapter" />
</div>
<!-- Loader - Start -->
<div class="dataExplorerLoaderContainer dataExplorerPaneLoaderContainer" data-bind="visible: isExecuting">
<img class="dataExplorerLoader" alt="loading indicator image" src="/LoadingIndicator_3Squares.gif" />
</div>
<!-- Loader - End -->
</div>
</div>

View File

@ -0,0 +1,19 @@
import { shallow } from "enzyme";
import React from "react";
import { GitHubClient } from "../../../GitHub/GitHubClient";
import { JunoClient } from "../../../Juno/JunoClient";
import Explorer from "../../Explorer";
import { GitHubReposPanel } from "./GitHubReposPanel";
const props = {
explorer: new Explorer(),
closePanel: (): void => undefined,
gitHubClientProp: new GitHubClient((): void => undefined),
junoClientProp: new JunoClient(),
openNotificationConsole: (): void => undefined,
};
describe("GitHub Repos Panel", () => {
it("should render Default properly", () => {
const wrapper = shallow(<GitHubReposPanel {...props} />);
expect(wrapper).toMatchSnapshot();
});
});

View File

@ -1,27 +1,42 @@
import _ from "underscore";
import { Areas, HttpStatusCodes } from "../../Common/Constants";
import * as ViewModels from "../../Contracts/ViewModels";
import { GitHubClient, IGitHubPageInfo, IGitHubRepo } from "../../GitHub/GitHubClient";
import { IPinnedRepo, JunoClient } from "../../Juno/JunoClient";
import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants";
import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
import * as GitHubUtils from "../../Utils/GitHubUtils";
import * as JunoUtils from "../../Utils/JunoUtils";
import { AuthorizeAccessComponent } from "../Controls/GitHub/AuthorizeAccessComponent";
import { GitHubReposComponent, GitHubReposComponentProps, RepoListItem } from "../Controls/GitHub/GitHubReposComponent";
import { GitHubReposComponentAdapter } from "../Controls/GitHub/GitHubReposComponentAdapter";
import { BranchesProps, PinnedReposProps, UnpinnedReposProps } from "../Controls/GitHub/ReposListComponent";
import { ContextualPaneBase } from "./ContextualPaneBase";
import { handleError } from "../../Common/ErrorHandlingUtils";
import React from "react";
import { Areas, HttpStatusCodes } from "../../../Common/Constants";
import { handleError } from "../../../Common/ErrorHandlingUtils";
import { GitHubClient, IGitHubPageInfo, IGitHubRepo } from "../../../GitHub/GitHubClient";
import { IPinnedRepo, JunoClient } from "../../../Juno/JunoClient";
import { Action, ActionModifiers } from "../../../Shared/Telemetry/TelemetryConstants";
import * as TelemetryProcessor from "../../../Shared/Telemetry/TelemetryProcessor";
import * as GitHubUtils from "../../../Utils/GitHubUtils";
import * as JunoUtils from "../../../Utils/JunoUtils";
import { AuthorizeAccessComponent } from "../../Controls/GitHub/AuthorizeAccessComponent";
import {
GitHubReposComponent,
GitHubReposComponentProps,
RepoListItem,
} from "../../Controls/GitHub/GitHubReposComponent";
import { ContentMainStyle } from "../../Controls/GitHub/GitHubStyleConstants";
import { BranchesProps, PinnedReposProps, UnpinnedReposProps } from "../../Controls/GitHub/ReposListComponent";
import Explorer from "../../Explorer";
import { PanelInfoErrorComponent } from "../PanelInfoErrorComponent";
import { PanelLoadingScreen } from "../PanelLoadingScreen";
interface GitHubReposPaneOptions extends ViewModels.PaneOptions {
gitHubClient: GitHubClient;
junoClient: JunoClient;
interface IGitHubReposPanelProps {
explorer: Explorer;
closePanel: () => void;
gitHubClientProp: GitHubClient;
junoClientProp: JunoClient;
openNotificationConsole: () => void;
}
export class GitHubReposPane extends ContextualPaneBase {
interface IGitHubReposPanelState {
showAuthorizationAcessState: boolean;
isExecuting: boolean;
errorMessage: string;
showErrorDetails: boolean;
gitHubReposState: GitHubReposComponentProps;
}
export class GitHubReposPanel extends React.Component<IGitHubReposPanelProps, IGitHubReposPanelState> {
private static readonly PageSize = 30;
private isAddedRepo = false;
private gitHubClient: GitHubClient;
private junoClient: JunoClient;
@ -29,73 +44,73 @@ export class GitHubReposPane extends ContextualPaneBase {
private pinnedReposProps: PinnedReposProps;
private unpinnedReposProps: UnpinnedReposProps;
private gitHubReposProps: GitHubReposComponentProps;
private gitHubReposAdapter: GitHubReposComponentAdapter;
private allGitHubRepos: IGitHubRepo[];
private allGitHubReposLastPageInfo?: IGitHubPageInfo;
private pinnedReposUpdated: boolean;
constructor(options: GitHubReposPaneOptions) {
super(options);
constructor(props: IGitHubReposPanelProps) {
super(props);
this.gitHubClient = options.gitHubClient;
this.junoClient = options.junoClient;
this.branchesProps = {};
this.pinnedReposProps = {
repos: [],
};
this.unpinnedReposProps = {
repos: [],
hasMore: true,
isLoading: true,
loadMore: (): Promise<void> => this.loadMoreUnpinnedRepos(),
};
this.gitHubReposProps = {
showAuthorizeAccess: true,
authorizeAccessProps: {
scope: this.getOAuthScope(),
authorizeAccess: (scope): void => this.connectToGitHub(scope),
},
reposListProps: {
branchesProps: this.branchesProps,
pinnedReposProps: this.pinnedReposProps,
unpinnedReposProps: this.unpinnedReposProps,
pinRepo: (item): Promise<void> => this.pinRepo(item),
unpinRepo: (item): Promise<void> => this.unpinRepo(item),
},
addRepoProps: {
container: this.container,
getRepo: (owner, repo): Promise<IGitHubRepo> => this.getRepo(owner, repo),
pinRepo: (item): Promise<void> => this.pinRepo(item),
},
resetConnection: (): void => this.setup(true),
onOkClick: (): Promise<void> => this.submit(),
onCancelClick: (): void => this.cancel(),
this.branchesProps = {};
this.pinnedReposProps = {
repos: [],
};
this.gitHubReposAdapter = new GitHubReposComponentAdapter(this.gitHubReposProps);
this.allGitHubRepos = [];
this.allGitHubReposLastPageInfo = undefined;
this.pinnedReposUpdated = false;
this.state = {
showAuthorizationAcessState: true,
isExecuting: false,
errorMessage: "",
showErrorDetails: false,
gitHubReposState: {
showAuthorizeAccess: !this.props.explorer.notebookManager?.gitHubOAuthService.isLoggedIn(),
authorizeAccessProps: {
scope: this.getOAuthScope(),
authorizeAccess: (scope): void => this.connectToGitHub(scope),
},
reposListProps: {
branchesProps: this.branchesProps,
pinnedReposProps: this.pinnedReposProps,
unpinnedReposProps: this.unpinnedReposProps,
pinRepo: (item): Promise<void> => this.pinRepo(item),
unpinRepo: (item): Promise<void> => this.unpinRepo(item),
},
addRepoProps: {
container: this.props.explorer,
getRepo: (owner, repo): Promise<IGitHubRepo> => this.getRepo(owner, repo),
pinRepo: (item): Promise<void> => this.pinRepo(item),
},
resetConnection: (): void => this.setup(true),
onOkClick: (): Promise<void> => this.submit(),
onCancelClick: (): void => this.props.closePanel(),
},
};
this.gitHubClient = this.props.gitHubClientProp;
this.junoClient = this.props.junoClientProp;
}
componentDidMount(): void {
this.open();
}
public open(): void {
this.resetData();
this.setup();
super.open();
}
public async submit(): Promise<void> {
const pinnedReposUpdated = this.pinnedReposUpdated;
const reposToPin: IPinnedRepo[] = this.pinnedReposProps.repos.map((repo) => JunoUtils.toPinnedRepo(repo));
// Submit resets data too
super.submit();
if (pinnedReposUpdated) {
try {
const response = await this.junoClient.updatePinnedRepos(reposToPin);
@ -109,57 +124,44 @@ export class GitHubReposPane extends ContextualPaneBase {
}
public resetData(): void {
// Reset cached branches
this.branchesProps = {};
this.gitHubReposProps.reposListProps.branchesProps = this.branchesProps;
// Reset cached pinned and unpinned repos
this.pinnedReposProps.repos = [];
this.unpinnedReposProps.repos = [];
// Reset cached repos
this.allGitHubRepos = [];
this.allGitHubReposLastPageInfo = undefined;
// Reset flags
this.pinnedReposUpdated = false;
this.unpinnedReposProps.hasMore = true;
this.unpinnedReposProps.isLoading = true;
this.triggerRender();
super.resetData();
}
private getOAuthScope(): string {
return (
this.container.notebookManager?.gitHubOAuthService.getTokenObservable()()?.scope ||
this.props.explorer.notebookManager?.gitHubOAuthService.getTokenObservable()()?.scope ||
AuthorizeAccessComponent.Scopes.Public.key
);
}
private setup(forceShowConnectToGitHub = false): void {
forceShowConnectToGitHub || !this.container.notebookManager?.gitHubOAuthService.isLoggedIn()
forceShowConnectToGitHub || !this.props.explorer.notebookManager?.gitHubOAuthService.isLoggedIn()
? this.setupForConnectToGitHub()
: this.setupForManageRepos();
}
private setupForConnectToGitHub(): void {
this.gitHubReposProps.showAuthorizeAccess = true;
this.gitHubReposProps.authorizeAccessProps.scope = this.getOAuthScope();
this.isExecuting(false);
this.title(GitHubReposComponent.ConnectToGitHubTitle); // Used for telemetry
this.triggerRender();
this.setState({
isExecuting: false,
});
}
private async setupForManageRepos(): Promise<void> {
this.gitHubReposProps.showAuthorizeAccess = false;
this.isExecuting(false);
this.title(GitHubReposComponent.ManageGitHubRepoTitle); // Used for telemetry
this.setState({
isExecuting: false,
});
TelemetryProcessor.trace(Action.NotebooksGitHubManageRepo, ActionModifiers.Mark, {
dataExplorerArea: Areas.Notebook,
});
this.triggerRender();
this.refreshManageReposComponent();
}
@ -182,15 +184,15 @@ export class GitHubReposPane extends ContextualPaneBase {
const branchesProps = this.branchesProps[GitHubUtils.toRepoFullName(repo.owner, repo.name)];
branchesProps.hasMore = true;
branchesProps.isLoading = true;
this.triggerRender();
try {
const response = await this.gitHubClient.getBranchesAsync(
repo.owner,
repo.name,
GitHubReposPane.PageSize,
GitHubReposPanel.PageSize,
branchesProps.lastPageInfo?.endCursor
);
if (response.status !== HttpStatusCodes.OK) {
throw new Error(`Received HTTP ${response.status} when fetching branches`);
}
@ -205,19 +207,37 @@ export class GitHubReposPane extends ContextualPaneBase {
branchesProps.isLoading = false;
branchesProps.hasMore = branchesProps.lastPageInfo?.hasNextPage;
this.triggerRender();
this.setState({
gitHubReposState: {
...this.state.gitHubReposState,
reposListProps: {
...this.state.gitHubReposState.reposListProps,
branchesProps: {
...this.state.gitHubReposState.reposListProps.branchesProps,
[GitHubUtils.toRepoFullName(repo.owner, repo.name)]: branchesProps,
},
pinnedReposProps: {
repos: this.pinnedReposProps.repos,
},
unpinnedReposProps: {
...this.state.gitHubReposState.reposListProps.unpinnedReposProps,
repos: this.unpinnedReposProps.repos,
},
},
},
});
}
private async loadMoreUnpinnedRepos(): Promise<void> {
this.unpinnedReposProps.isLoading = true;
this.unpinnedReposProps.hasMore = true;
this.triggerRender();
try {
const response = await this.gitHubClient.getReposAsync(
GitHubReposPane.PageSize,
GitHubReposPanel.PageSize,
this.allGitHubReposLastPageInfo?.endCursor
);
if (response.status !== HttpStatusCodes.OK) {
throw new Error(`Received HTTP ${response.status} when fetching unpinned repos`);
}
@ -233,7 +253,21 @@ export class GitHubReposPane extends ContextualPaneBase {
this.unpinnedReposProps.isLoading = false;
this.unpinnedReposProps.hasMore = this.allGitHubReposLastPageInfo?.hasNextPage;
this.triggerRender();
this.setState({
gitHubReposState: {
...this.state.gitHubReposState,
reposListProps: {
...this.state.gitHubReposState.reposListProps,
unpinnedReposProps: {
...this.state.gitHubReposState.reposListProps.unpinnedReposProps,
isLoading: this.unpinnedReposProps.isLoading,
hasMore: this.unpinnedReposProps.hasMore,
repos: this.unpinnedReposProps.repos,
},
},
},
});
}
private async getRepo(owner: string, repo: string): Promise<IGitHubRepo> {
@ -242,7 +276,7 @@ export class GitHubReposPane extends ContextualPaneBase {
if (response.status !== HttpStatusCodes.OK) {
throw new Error(`Received HTTP ${response.status} when fetching repo`);
}
this.isAddedRepo = true;
return response.data;
} catch (error) {
handleError(error, "GitHubReposPane/getRepo", "Failed to fetch repo");
@ -254,7 +288,7 @@ export class GitHubReposPane extends ContextualPaneBase {
this.pinnedReposUpdated = true;
const initialReposLength = this.pinnedReposProps.repos.length;
const existingRepo = _.find(this.pinnedReposProps.repos, (repo) => repo.key === item.key);
const existingRepo = this.pinnedReposProps.repos.find((repo) => repo.key === item.key);
if (existingRepo) {
existingRepo.branches = item.branches;
} else {
@ -262,7 +296,6 @@ export class GitHubReposPane extends ContextualPaneBase {
}
this.unpinnedReposProps.repos = this.calculateUnpinnedRepos();
this.triggerRender();
if (this.pinnedReposProps.repos.length > initialReposLength) {
this.refreshBranchesForPinnedRepos();
@ -273,7 +306,22 @@ export class GitHubReposPane extends ContextualPaneBase {
this.pinnedReposUpdated = true;
this.pinnedReposProps.repos = this.pinnedReposProps.repos.filter((pinnedRepo) => pinnedRepo.key !== item.key);
this.unpinnedReposProps.repos = this.calculateUnpinnedRepos();
this.triggerRender();
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,
},
},
},
});
}
private async refreshManageReposComponent(): Promise<void> {
@ -284,12 +332,12 @@ export class GitHubReposPane extends ContextualPaneBase {
private async refreshPinnedRepoListItems(): Promise<void> {
this.pinnedReposProps.repos = [];
this.triggerRender();
try {
const response = await this.junoClient.getPinnedRepos(
this.container.notebookManager?.gitHubOAuthService.getTokenObservable()()?.scope
this.props.explorer.notebookManager?.gitHubOAuthService.getTokenObservable()()?.scope
);
if (response.status !== HttpStatusCodes.OK && response.status !== HttpStatusCodes.NoContent) {
throw new Error(`Received HTTP ${response.status} when fetching pinned repos`);
}
@ -305,7 +353,6 @@ export class GitHubReposPane extends ContextualPaneBase {
);
this.pinnedReposProps.repos = pinnedRepos;
this.triggerRender();
}
} catch (error) {
handleError(error, "GitHubReposPane/refreshPinnedReposListItems", "Failed to fetch pinned repos");
@ -322,28 +369,85 @@ export class GitHubReposPane extends ContextualPaneBase {
isLoading: true,
loadMore: (): Promise<void> => 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.isAddedRepo = false;
}
private async refreshUnpinnedRepoListItems(): Promise<void> {
this.allGitHubRepos = [];
this.allGitHubReposLastPageInfo = undefined;
this.unpinnedReposProps.repos = [];
this.loadMoreUnpinnedRepos();
}
private connectToGitHub(scope: string): void {
this.isExecuting(true);
this.setState({
isExecuting: true,
});
TelemetryProcessor.trace(Action.NotebooksGitHubAuthorize, ActionModifiers.Mark, {
dataExplorerArea: Areas.Notebook,
scopesSelected: scope,
});
this.container.notebookManager?.gitHubOAuthService.startOAuth(scope);
this.props.explorer.notebookManager?.gitHubOAuthService.startOAuth(scope);
}
private triggerRender(): void {
this.gitHubReposAdapter.triggerRender();
render(): JSX.Element {
return (
<form className="panelFormWrapper">
{this.state.errorMessage && (
<PanelInfoErrorComponent
message={this.state.errorMessage}
messageType="error"
showErrorDetails={this.state.showErrorDetails}
openNotificationConsole={this.props.openNotificationConsole}
/>
)}
<div className="panelMainContent" style={ContentMainStyle}>
<GitHubReposComponent {...this.state.gitHubReposState} />
</div>
{this.state.isExecuting && <PanelLoadingScreen />}
</form>
);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,6 @@
import AddCollectionPaneTemplate from "./AddCollectionPane.html";
import AddDatabasePaneTemplate from "./AddDatabasePane.html";
import CassandraAddCollectionPaneTemplate from "./CassandraAddCollectionPane.html";
import GitHubReposPaneTemplate from "./GitHubReposPane.html";
import GraphStylingPaneTemplate from "./GraphStylingPane.html";
import TableAddEntityPaneTemplate from "./Tables/TableAddEntityPane.html";
import TableEditEntityPaneTemplate from "./Tables/TableEditEntityPane.html";
@ -64,12 +63,3 @@ export class CassandraAddCollectionPaneComponent {
};
}
}
export class GitHubReposPaneComponent {
constructor() {
return {
viewModel: PaneComponent,
template: GitHubReposPaneTemplate,
};
}
}

View File

@ -406,6 +406,773 @@ exports[`StringInput Pane should render Create new directory properly 1`] = `
"defaultExperience": [Function],
"deleteCollectionText": [Function],
"deleteDatabaseText": [Function],
"gitHubClient": GitHubClient {
"errorCallback": [Function],
"ocktokit": OctokitWithDefaults {
"actions": Object {
"addSelectedRepoToOrgSecret": [Function],
"cancelWorkflowRun": [Function],
"createOrUpdateOrgSecret": [Function],
"createOrUpdateRepoSecret": [Function],
"createOrUpdateSecretForRepo": [Function],
"createRegistrationToken": [Function],
"createRegistrationTokenForOrg": [Function],
"createRegistrationTokenForRepo": [Function],
"createRemoveToken": [Function],
"createRemoveTokenForOrg": [Function],
"createRemoveTokenForRepo": [Function],
"deleteArtifact": [Function],
"deleteOrgSecret": [Function],
"deleteRepoSecret": [Function],
"deleteSecretFromRepo": [Function],
"deleteSelfHostedRunnerFromOrg": [Function],
"deleteSelfHostedRunnerFromRepo": [Function],
"deleteWorkflowRunLogs": [Function],
"downloadArtifact": [Function],
"downloadJobLogsForWorkflowRun": [Function],
"downloadWorkflowJobLogs": [Function],
"downloadWorkflowRunLogs": [Function],
"getArtifact": [Function],
"getJobForWorkflowRun": [Function],
"getOrgPublicKey": [Function],
"getOrgSecret": [Function],
"getPublicKey": [Function],
"getRepoPublicKey": [Function],
"getRepoSecret": [Function],
"getSecret": [Function],
"getSelfHostedRunner": [Function],
"getSelfHostedRunnerForOrg": [Function],
"getSelfHostedRunnerForRepo": [Function],
"getWorkflow": [Function],
"getWorkflowJob": [Function],
"getWorkflowRun": [Function],
"getWorkflowRunUsage": [Function],
"getWorkflowUsage": [Function],
"listArtifactsForRepo": [Function],
"listDownloadsForSelfHostedRunnerApplication": [Function],
"listJobsForWorkflowRun": [Function],
"listOrgSecrets": [Function],
"listRepoSecrets": [Function],
"listRepoWorkflowRuns": [Function],
"listRepoWorkflows": [Function],
"listRunnerApplicationsForOrg": [Function],
"listRunnerApplicationsForRepo": [Function],
"listSecretsForRepo": [Function],
"listSelectedReposForOrgSecret": [Function],
"listSelfHostedRunnersForOrg": [Function],
"listSelfHostedRunnersForRepo": [Function],
"listWorkflowJobLogs": [Function],
"listWorkflowRunArtifacts": [Function],
"listWorkflowRunLogs": [Function],
"listWorkflowRuns": [Function],
"listWorkflowRunsForRepo": [Function],
"reRunWorkflow": [Function],
"removeSelectedRepoFromOrgSecret": [Function],
"removeSelfHostedRunner": [Function],
"setSelectedReposForOrgSecret": [Function],
},
"activity": Object {
"checkRepoIsStarredByAuthenticatedUser": [Function],
"checkStarringRepo": [Function],
"deleteRepoSubscription": [Function],
"deleteThreadSubscription": [Function],
"getFeeds": [Function],
"getRepoSubscription": [Function],
"getThread": [Function],
"getThreadSubscription": [Function],
"getThreadSubscriptionForAuthenticatedUser": [Function],
"listEventsForAuthenticatedUser": [Function],
"listEventsForOrg": [Function],
"listEventsForUser": [Function],
"listFeeds": [Function],
"listNotifications": [Function],
"listNotificationsForAuthenticatedUser": [Function],
"listNotificationsForRepo": [Function],
"listOrgEventsForAuthenticatedUser": [Function],
"listPublicEvents": [Function],
"listPublicEventsForOrg": [Function],
"listPublicEventsForRepoNetwork": [Function],
"listPublicEventsForUser": [Function],
"listPublicOrgEvents": [Function],
"listReceivedEventsForUser": [Function],
"listReceivedPublicEventsForUser": [Function],
"listRepoEvents": [Function],
"listRepoNotificationsForAuthenticatedUser": [Function],
"listReposStarredByAuthenticatedUser": [Function],
"listReposStarredByUser": [Function],
"listReposWatchedByUser": [Function],
"listStargazersForRepo": [Function],
"listWatchedReposForAuthenticatedUser": [Function],
"listWatchersForRepo": [Function],
"markAsRead": [Function],
"markNotificationsAsRead": [Function],
"markNotificationsAsReadForRepo": [Function],
"markRepoNotificationsAsRead": [Function],
"markThreadAsRead": [Function],
"setRepoSubscription": [Function],
"setThreadSubscription": [Function],
"starRepo": [Function],
"starRepoForAuthenticatedUser": [Function],
"unstarRepo": [Function],
"unstarRepoForAuthenticatedUser": [Function],
},
"apps": Object {
"addRepoToInstallation": [Function],
"checkAccountIsAssociatedWithAny": [Function],
"checkAccountIsAssociatedWithAnyStubbed": [Function],
"checkToken": [Function],
"createContentAttachment": [Function],
"createFromManifest": [Function],
"createInstallationAccessToken": [Function],
"createInstallationToken": [Function],
"deleteAuthorization": [Function],
"deleteInstallation": [Function],
"deleteToken": [Function],
"getAuthenticated": [Function],
"getBySlug": [Function],
"getInstallation": [Function],
"getOrgInstallation": [Function],
"getRepoInstallation": [Function],
"getSubscriptionPlanForAccount": [Function],
"getSubscriptionPlanForAccountStubbed": [Function],
"getUserInstallation": [Function],
"listAccountsForPlan": [Function],
"listAccountsForPlanStubbed": [Function],
"listAccountsUserOrOrgOnPlan": [Function],
"listAccountsUserOrOrgOnPlanStubbed": [Function],
"listInstallationReposForAuthenticatedUser": [Function],
"listInstallations": [Function],
"listInstallationsForAuthenticatedUser": [Function],
"listMarketplacePurchasesForAuthenticatedUser": [Function],
"listMarketplacePurchasesForAuthenticatedUserStubbed": [Function],
"listPlans": [Function],
"listPlansStubbed": [Function],
"listRepos": [Function],
"listReposAccessibleToInstallation": [Function],
"listSubscriptionsForAuthenticatedUser": [Function],
"listSubscriptionsForAuthenticatedUserStubbed": [Function],
"removeRepoFromInstallation": [Function],
"resetToken": [Function],
"revokeInstallationAccessToken": [Function],
"revokeInstallationToken": [Function],
"suspendInstallation": [Function],
"unsuspendInstallation": [Function],
},
"auth": [Function],
"checks": Object {
"create": [Function],
"createSuite": [Function],
"get": [Function],
"getSuite": [Function],
"listAnnotations": [Function],
"listForRef": [Function],
"listForSuite": [Function],
"listSuitesForRef": [Function],
"rerequestSuite": [Function],
"setSuitesPreferences": [Function],
"update": [Function],
},
"codeScanning": Object {
"getAlert": [Function],
"listAlertsForRepo": [Function],
},
"codesOfConduct": Object {
"getAllCodesOfConduct": [Function],
"getConductCode": [Function],
"getForRepo": [Function],
"listConductCodes": [Function],
},
"emojis": Object {
"get": [Function],
},
"gists": Object {
"checkIsStarred": [Function],
"create": [Function],
"createComment": [Function],
"delete": [Function],
"deleteComment": [Function],
"fork": [Function],
"get": [Function],
"getComment": [Function],
"getRevision": [Function],
"list": [Function],
"listComments": [Function],
"listCommits": [Function],
"listForUser": [Function],
"listForks": [Function],
"listPublic": [Function],
"listPublicForUser": [Function],
"listStarred": [Function],
"star": [Function],
"unstar": [Function],
"update": [Function],
"updateComment": [Function],
},
"git": Object {
"createBlob": [Function],
"createCommit": [Function],
"createRef": [Function],
"createTag": [Function],
"createTree": [Function],
"deleteRef": [Function],
"getBlob": [Function],
"getCommit": [Function],
"getRef": [Function],
"getTag": [Function],
"getTree": [Function],
"listMatchingRefs": [Function],
"updateRef": [Function],
},
"gitignore": Object {
"getAllTemplates": [Function],
"getTemplate": [Function],
"listTemplates": [Function],
},
"graphql": [Function],
"hook": [Function],
"interactions": Object {
"addOrUpdateRestrictionsForOrg": [Function],
"addOrUpdateRestrictionsForRepo": [Function],
"getRestrictionsForOrg": [Function],
"getRestrictionsForRepo": [Function],
"removeRestrictionsForOrg": [Function],
"removeRestrictionsForRepo": [Function],
"setRestrictionsForOrg": [Function],
"setRestrictionsForRepo": [Function],
},
"issues": Object {
"addAssignees": [Function],
"addLabels": [Function],
"checkAssignee": [Function],
"checkUserCanBeAssigned": [Function],
"create": [Function],
"createComment": [Function],
"createLabel": [Function],
"createMilestone": [Function],
"deleteComment": [Function],
"deleteLabel": [Function],
"deleteMilestone": [Function],
"get": [Function],
"getComment": [Function],
"getEvent": [Function],
"getLabel": [Function],
"getMilestone": [Function],
"list": [Function],
"listAssignees": [Function],
"listComments": [Function],
"listCommentsForRepo": [Function],
"listEvents": [Function],
"listEventsForRepo": [Function],
"listEventsForTimeline": [Function],
"listForAuthenticatedUser": [Function],
"listForOrg": [Function],
"listForRepo": [Function],
"listLabelsForMilestone": [Function],
"listLabelsForRepo": [Function],
"listLabelsOnIssue": [Function],
"listMilestones": [Function],
"listMilestonesForRepo": [Function],
"lock": [Function],
"removeAllLabels": [Function],
"removeAssignees": [Function],
"removeLabel": [Function],
"removeLabels": [Function],
"replaceAllLabels": [Function],
"replaceLabels": [Function],
"setLabels": [Function],
"unlock": [Function],
"update": [Function],
"updateComment": [Function],
"updateLabel": [Function],
"updateMilestone": [Function],
},
"licenses": Object {
"get": [Function],
"getAllCommonlyUsed": [Function],
"getForRepo": [Function],
"listCommonlyUsed": [Function],
},
"log": Object {
"debug": [Function],
"error": [Function],
"info": [Function],
"warn": [Function],
},
"markdown": Object {
"render": [Function],
"renderRaw": [Function],
},
"meta": Object {
"get": [Function],
},
"migrations": Object {
"cancelImport": [Function],
"deleteArchiveForAuthenticatedUser": [Function],
"deleteArchiveForOrg": [Function],
"downloadArchiveForOrg": [Function],
"getArchiveForAuthenticatedUser": [Function],
"getCommitAuthors": [Function],
"getImportProgress": [Function],
"getImportStatus": [Function],
"getLargeFiles": [Function],
"getStatusForAuthenticatedUser": [Function],
"getStatusForOrg": [Function],
"listForAuthenticatedUser": [Function],
"listForOrg": [Function],
"listReposForOrg": [Function],
"listReposForUser": [Function],
"mapCommitAuthor": [Function],
"setLfsPreference": [Function],
"startForAuthenticatedUser": [Function],
"startForOrg": [Function],
"startImport": [Function],
"unlockRepoForAuthenticatedUser": [Function],
"unlockRepoForOrg": [Function],
"updateImport": [Function],
},
"orgs": Object {
"addOrUpdateMembership": [Function],
"blockUser": [Function],
"checkBlockedUser": [Function],
"checkMembership": [Function],
"checkMembershipForUser": [Function],
"checkPublicMembership": [Function],
"checkPublicMembershipForUser": [Function],
"concealMembership": [Function],
"convertMemberToOutsideCollaborator": [Function],
"createHook": [Function],
"createInvitation": [Function],
"createWebhook": [Function],
"deleteHook": [Function],
"deleteWebhook": [Function],
"get": [Function],
"getHook": [Function],
"getMembership": [Function],
"getMembershipForAuthenticatedUser": [Function],
"getMembershipForUser": [Function],
"getWebhook": [Function],
"list": [Function],
"listAppInstallations": [Function],
"listBlockedUsers": [Function],
"listForAuthenticatedUser": [Function],
"listForUser": [Function],
"listHooks": [Function],
"listInstallations": [Function],
"listInvitationTeams": [Function],
"listMembers": [Function],
"listMemberships": [Function],
"listMembershipsForAuthenticatedUser": [Function],
"listOutsideCollaborators": [Function],
"listPendingInvitations": [Function],
"listPublicMembers": [Function],
"listWebhooks": [Function],
"pingHook": [Function],
"pingWebhook": [Function],
"publicizeMembership": [Function],
"removeMember": [Function],
"removeMembership": [Function],
"removeMembershipForUser": [Function],
"removeOutsideCollaborator": [Function],
"removePublicMembershipForAuthenticatedUser": [Function],
"setMembershipForUser": [Function],
"setPublicMembershipForAuthenticatedUser": [Function],
"unblockUser": [Function],
"update": [Function],
"updateHook": [Function],
"updateMembership": [Function],
"updateMembershipForAuthenticatedUser": [Function],
"updateWebhook": [Function],
},
"paginate": [Function],
"projects": Object {
"addCollaborator": [Function],
"createCard": [Function],
"createColumn": [Function],
"createForAuthenticatedUser": [Function],
"createForOrg": [Function],
"createForRepo": [Function],
"delete": [Function],
"deleteCard": [Function],
"deleteColumn": [Function],
"get": [Function],
"getCard": [Function],
"getColumn": [Function],
"getPermissionForUser": [Function],
"listCards": [Function],
"listCollaborators": [Function],
"listColumns": [Function],
"listForOrg": [Function],
"listForRepo": [Function],
"listForUser": [Function],
"moveCard": [Function],
"moveColumn": [Function],
"removeCollaborator": [Function],
"reviewUserPermissionLevel": [Function],
"update": [Function],
"updateCard": [Function],
"updateColumn": [Function],
},
"pulls": Object {
"checkIfMerged": [Function],
"create": [Function],
"createComment": [Function],
"createReplyForReviewComment": [Function],
"createReview": [Function],
"createReviewComment": [Function],
"createReviewCommentReply": [Function],
"createReviewRequest": [Function],
"deleteComment": [Function],
"deletePendingReview": [Function],
"deleteReviewComment": [Function],
"deleteReviewRequest": [Function],
"dismissReview": [Function],
"get": [Function],
"getComment": [Function],
"getCommentsForReview": [Function],
"getReview": [Function],
"getReviewComment": [Function],
"list": [Function],
"listComments": [Function],
"listCommentsForRepo": [Function],
"listCommentsForReview": [Function],
"listCommits": [Function],
"listFiles": [Function],
"listRequestedReviewers": [Function],
"listReviewComments": [Function],
"listReviewCommentsForRepo": [Function],
"listReviewRequests": [Function],
"listReviews": [Function],
"merge": [Function],
"removeRequestedReviewers": [Function],
"requestReviewers": [Function],
"submitReview": [Function],
"update": [Function],
"updateBranch": [Function],
"updateComment": [Function],
"updateReview": [Function],
"updateReviewComment": [Function],
},
"rateLimit": Object {
"get": [Function],
},
"reactions": Object {
"createForCommitComment": [Function],
"createForIssue": [Function],
"createForIssueComment": [Function],
"createForPullRequestReviewComment": [Function],
"createForTeamDiscussionCommentInOrg": [Function],
"createForTeamDiscussionInOrg": [Function],
"delete": [Function],
"deleteForCommitComment": [Function],
"deleteForIssue": [Function],
"deleteForIssueComment": [Function],
"deleteForPullRequestComment": [Function],
"deleteForTeamDiscussion": [Function],
"deleteForTeamDiscussionComment": [Function],
"deleteLegacy": [Function],
"listForCommitComment": [Function],
"listForIssue": [Function],
"listForIssueComment": [Function],
"listForPullRequestReviewComment": [Function],
"listForTeamDiscussionCommentInOrg": [Function],
"listForTeamDiscussionInOrg": [Function],
},
"repos": Object {
"acceptInvitation": [Function],
"addAppAccessRestrictions": [Function],
"addCollaborator": [Function],
"addDeployKey": [Function],
"addProtectedBranchAdminEnforcement": [Function],
"addProtectedBranchAppRestrictions": [Function],
"addProtectedBranchRequiredSignatures": [Function],
"addProtectedBranchRequiredStatusChecksContexts": [Function],
"addProtectedBranchTeamRestrictions": [Function],
"addProtectedBranchUserRestrictions": [Function],
"addStatusCheckContexts": [Function],
"addTeamAccessRestrictions": [Function],
"addUserAccessRestrictions": [Function],
"checkCollaborator": [Function],
"checkVulnerabilityAlerts": [Function],
"compareCommits": [Function],
"createCommitComment": [Function],
"createCommitSignatureProtection": [Function],
"createCommitStatus": [Function],
"createDeployKey": [Function],
"createDeployment": [Function],
"createDeploymentStatus": [Function],
"createDispatchEvent": [Function],
"createForAuthenticatedUser": [Function],
"createFork": [Function],
"createHook": [Function],
"createInOrg": [Function],
"createOrUpdateFile": [Function],
"createOrUpdateFileContents": [Function],
"createPagesSite": [Function],
"createRelease": [Function],
"createStatus": [Function],
"createUsingTemplate": [Function],
"createWebhook": [Function],
"declineInvitation": [Function],
"delete": [Function],
"deleteAccessRestrictions": [Function],
"deleteAdminBranchProtection": [Function],
"deleteBranchProtection": [Function],
"deleteCommitComment": [Function],
"deleteCommitSignatureProtection": [Function],
"deleteDeployKey": [Function],
"deleteDeployment": [Function],
"deleteDownload": [Function],
"deleteFile": [Function],
"deleteHook": [Function],
"deleteInvitation": [Function],
"deletePagesSite": [Function],
"deletePullRequestReviewProtection": [Function],
"deleteRelease": [Function],
"deleteReleaseAsset": [Function],
"deleteWebhook": [Function],
"disableAutomatedSecurityFixes": [Function],
"disablePagesSite": [Function],
"disableVulnerabilityAlerts": [Function],
"downloadArchive": [Function],
"enableAutomatedSecurityFixes": [Function],
"enablePagesSite": [Function],
"enableVulnerabilityAlerts": [Function],
"get": [Function],
"getAccessRestrictions": [Function],
"getAdminBranchProtection": [Function],
"getAllStatusCheckContexts": [Function],
"getAllTopics": [Function],
"getAppsWithAccessToProtectedBranch": [Function],
"getArchiveLink": [Function],
"getBranch": [Function],
"getBranchProtection": [Function],
"getClones": [Function],
"getCodeFrequencyStats": [Function],
"getCollaboratorPermissionLevel": [Function],
"getCombinedStatusForRef": [Function],
"getCommit": [Function],
"getCommitActivityStats": [Function],
"getCommitComment": [Function],
"getCommitSignatureProtection": [Function],
"getCommunityProfileMetrics": [Function],
"getContent": [Function],
"getContents": [Function],
"getContributorsStats": [Function],
"getDeployKey": [Function],
"getDeployment": [Function],
"getDeploymentStatus": [Function],
"getDownload": [Function],
"getHook": [Function],
"getLatestPagesBuild": [Function],
"getLatestRelease": [Function],
"getPages": [Function],
"getPagesBuild": [Function],
"getParticipationStats": [Function],
"getProtectedBranchAdminEnforcement": [Function],
"getProtectedBranchPullRequestReviewEnforcement": [Function],
"getProtectedBranchRequiredSignatures": [Function],
"getProtectedBranchRequiredStatusChecks": [Function],
"getProtectedBranchRestrictions": [Function],
"getPullRequestReviewProtection": [Function],
"getPunchCardStats": [Function],
"getReadme": [Function],
"getRelease": [Function],
"getReleaseAsset": [Function],
"getReleaseByTag": [Function],
"getStatusChecksProtection": [Function],
"getTeamsWithAccessToProtectedBranch": [Function],
"getTopPaths": [Function],
"getTopReferrers": [Function],
"getUsersWithAccessToProtectedBranch": [Function],
"getViews": [Function],
"getWebhook": [Function],
"list": [Function],
"listAssetsForRelease": [Function],
"listBranches": [Function],
"listBranchesForHeadCommit": [Function],
"listCollaborators": [Function],
"listCommentsForCommit": [Function],
"listCommitComments": [Function],
"listCommitCommentsForRepo": [Function],
"listCommitStatusesForRef": [Function],
"listCommits": [Function],
"listContributors": [Function],
"listDeployKeys": [Function],
"listDeploymentStatuses": [Function],
"listDeployments": [Function],
"listDownloads": [Function],
"listForAuthenticatedUser": [Function],
"listForOrg": [Function],
"listForUser": [Function],
"listForks": [Function],
"listHooks": [Function],
"listInvitations": [Function],
"listInvitationsForAuthenticatedUser": [Function],
"listLanguages": [Function],
"listPagesBuilds": [Function],
"listProtectedBranchRequiredStatusChecksContexts": [Function],
"listPublic": [Function],
"listPullRequestsAssociatedWithCommit": [Function],
"listReleaseAssets": [Function],
"listReleases": [Function],
"listStatusesForRef": [Function],
"listTags": [Function],
"listTeams": [Function],
"listTopics": [Function],
"listWebhooks": [Function],
"merge": [Function],
"pingHook": [Function],
"pingWebhook": [Function],
"removeAppAccessRestrictions": [Function],
"removeBranchProtection": [Function],
"removeCollaborator": [Function],
"removeDeployKey": [Function],
"removeProtectedBranchAdminEnforcement": [Function],
"removeProtectedBranchAppRestrictions": [Function],
"removeProtectedBranchPullRequestReviewEnforcement": [Function],
"removeProtectedBranchRequiredSignatures": [Function],
"removeProtectedBranchRequiredStatusChecks": [Function],
"removeProtectedBranchRequiredStatusChecksContexts": [Function],
"removeProtectedBranchRestrictions": [Function],
"removeProtectedBranchTeamRestrictions": [Function],
"removeProtectedBranchUserRestrictions": [Function],
"removeStatusCheckContexts": [Function],
"removeStatusCheckProtection": [Function],
"removeTeamAccessRestrictions": [Function],
"removeUserAccessRestrictions": [Function],
"replaceAllTopics": [Function],
"replaceProtectedBranchAppRestrictions": [Function],
"replaceProtectedBranchRequiredStatusChecksContexts": [Function],
"replaceProtectedBranchTeamRestrictions": [Function],
"replaceProtectedBranchUserRestrictions": [Function],
"replaceTopics": [Function],
"requestPageBuild": [Function],
"requestPagesBuild": [Function],
"retrieveCommunityProfileMetrics": [Function],
"setAdminBranchProtection": [Function],
"setAppAccessRestrictions": [Function],
"setStatusCheckContexts": [Function],
"setTeamAccessRestrictions": [Function],
"setUserAccessRestrictions": [Function],
"testPushHook": [Function],
"testPushWebhook": [Function],
"transfer": [Function],
"update": [Function],
"updateBranchProtection": [Function],
"updateCommitComment": [Function],
"updateHook": [Function],
"updateInformationAboutPagesSite": [Function],
"updateInvitation": [Function],
"updateProtectedBranchPullRequestReviewEnforcement": [Function],
"updateProtectedBranchRequiredStatusChecks": [Function],
"updatePullRequestReviewProtection": [Function],
"updateRelease": [Function],
"updateReleaseAsset": [Function],
"updateStatusCheckPotection": [Function],
"updateWebhook": [Function],
"uploadReleaseAsset": [Function],
},
"request": [Function],
"search": Object {
"code": [Function],
"commits": [Function],
"issuesAndPullRequests": [Function],
"labels": [Function],
"repos": [Function],
"topics": [Function],
"users": [Function],
},
"teams": Object {
"addOrUpdateMembershipForUserInOrg": [Function],
"addOrUpdateMembershipInOrg": [Function],
"addOrUpdateProjectInOrg": [Function],
"addOrUpdateProjectPermissionsInOrg": [Function],
"addOrUpdateRepoInOrg": [Function],
"addOrUpdateRepoPermissionsInOrg": [Function],
"checkManagesRepoInOrg": [Function],
"checkPermissionsForProjectInOrg": [Function],
"checkPermissionsForRepoInOrg": [Function],
"create": [Function],
"createDiscussionCommentInOrg": [Function],
"createDiscussionInOrg": [Function],
"deleteDiscussionCommentInOrg": [Function],
"deleteDiscussionInOrg": [Function],
"deleteInOrg": [Function],
"getByName": [Function],
"getDiscussionCommentInOrg": [Function],
"getDiscussionInOrg": [Function],
"getMembershipForUserInOrg": [Function],
"getMembershipInOrg": [Function],
"list": [Function],
"listChildInOrg": [Function],
"listDiscussionCommentsInOrg": [Function],
"listDiscussionsInOrg": [Function],
"listForAuthenticatedUser": [Function],
"listMembersInOrg": [Function],
"listPendingInvitationsInOrg": [Function],
"listProjectsInOrg": [Function],
"listReposInOrg": [Function],
"removeMembershipForUserInOrg": [Function],
"removeMembershipInOrg": [Function],
"removeProjectInOrg": [Function],
"removeRepoInOrg": [Function],
"reviewProjectInOrg": [Function],
"updateDiscussionCommentInOrg": [Function],
"updateDiscussionInOrg": [Function],
"updateInOrg": [Function],
},
"users": Object {
"addEmailForAuthenticated": [Function],
"addEmails": [Function],
"block": [Function],
"checkBlocked": [Function],
"checkFollowing": [Function],
"checkFollowingForUser": [Function],
"checkPersonIsFollowedByAuthenticated": [Function],
"createGpgKey": [Function],
"createGpgKeyForAuthenticated": [Function],
"createPublicKey": [Function],
"createPublicSshKeyForAuthenticated": [Function],
"deleteEmailForAuthenticated": [Function],
"deleteEmails": [Function],
"deleteGpgKey": [Function],
"deleteGpgKeyForAuthenticated": [Function],
"deletePublicKey": [Function],
"deletePublicSshKeyForAuthenticated": [Function],
"follow": [Function],
"getAuthenticated": [Function],
"getByUsername": [Function],
"getContextForUser": [Function],
"getGpgKey": [Function],
"getGpgKeyForAuthenticated": [Function],
"getPublicKey": [Function],
"getPublicSshKeyForAuthenticated": [Function],
"list": [Function],
"listBlocked": [Function],
"listBlockedByAuthenticated": [Function],
"listEmails": [Function],
"listEmailsForAuthenticated": [Function],
"listFollowedByAuthenticated": [Function],
"listFollowersForAuthenticatedUser": [Function],
"listFollowersForUser": [Function],
"listFollowingForAuthenticatedUser": [Function],
"listFollowingForUser": [Function],
"listGpgKeys": [Function],
"listGpgKeysForAuthenticated": [Function],
"listGpgKeysForUser": [Function],
"listPublicEmails": [Function],
"listPublicEmailsForAuthenticated": [Function],
"listPublicKeys": [Function],
"listPublicKeysForUser": [Function],
"listPublicSshKeysForAuthenticated": [Function],
"setPrimaryEmailVisibilityForAuthenticated": [Function],
"togglePrimaryEmailVisibility": [Function],
"unblock": [Function],
"unfollow": [Function],
"updateAuthenticated": [Function],
},
},
},
"graphStylingPane": GraphStylingPane {
"container": [Circular],
"firstFieldHasFocus": [Function],
@ -431,7 +1198,6 @@ exports[`StringInput Pane should render Create new directory properly 1`] = `
"isAutoscaleDefaultEnabled": [Function],
"isEnableMongoCapabilityPresent": [Function],
"isFixedCollectionWithSharedThroughputSupported": [Function],
"isGitHubPaneEnabled": [Function],
"isHostedDataExplorerEnabled": [Function],
"isLeftPaneExpanded": [Function],
"isMongoIndexingEnabled": [Function],
@ -446,9 +1212,14 @@ exports[`StringInput Pane should render Create new directory properly 1`] = `
"isSparkEnabledForAccount": [Function],
"isSynapseLinkUpdating": [Function],
"isTabsContentExpanded": [Function],
"junoClient": JunoClient {
"cachedPinnedRepos": [Function],
"databaseAccount": undefined,
},
"memoryUsageInfo": [Function],
"notebookBasePath": [Function],
"notebookServerInfo": [Function],
"onGitHubClientError": [Function],
"onRefreshDatabasesKeyPress": [Function],
"onRefreshResourcesClick": [Function],
"onSwitchToConnectionString": [Function],

View File

@ -404,6 +404,773 @@ exports[`Delete Database Confirmation Pane submit() Should call delete database
"defaultExperience": [Function],
"deleteCollectionText": [Function],
"deleteDatabaseText": [Function],
"gitHubClient": GitHubClient {
"errorCallback": [Function],
"ocktokit": OctokitWithDefaults {
"actions": Object {
"addSelectedRepoToOrgSecret": [Function],
"cancelWorkflowRun": [Function],
"createOrUpdateOrgSecret": [Function],
"createOrUpdateRepoSecret": [Function],
"createOrUpdateSecretForRepo": [Function],
"createRegistrationToken": [Function],
"createRegistrationTokenForOrg": [Function],
"createRegistrationTokenForRepo": [Function],
"createRemoveToken": [Function],
"createRemoveTokenForOrg": [Function],
"createRemoveTokenForRepo": [Function],
"deleteArtifact": [Function],
"deleteOrgSecret": [Function],
"deleteRepoSecret": [Function],
"deleteSecretFromRepo": [Function],
"deleteSelfHostedRunnerFromOrg": [Function],
"deleteSelfHostedRunnerFromRepo": [Function],
"deleteWorkflowRunLogs": [Function],
"downloadArtifact": [Function],
"downloadJobLogsForWorkflowRun": [Function],
"downloadWorkflowJobLogs": [Function],
"downloadWorkflowRunLogs": [Function],
"getArtifact": [Function],
"getJobForWorkflowRun": [Function],
"getOrgPublicKey": [Function],
"getOrgSecret": [Function],
"getPublicKey": [Function],
"getRepoPublicKey": [Function],
"getRepoSecret": [Function],
"getSecret": [Function],
"getSelfHostedRunner": [Function],
"getSelfHostedRunnerForOrg": [Function],
"getSelfHostedRunnerForRepo": [Function],
"getWorkflow": [Function],
"getWorkflowJob": [Function],
"getWorkflowRun": [Function],
"getWorkflowRunUsage": [Function],
"getWorkflowUsage": [Function],
"listArtifactsForRepo": [Function],
"listDownloadsForSelfHostedRunnerApplication": [Function],
"listJobsForWorkflowRun": [Function],
"listOrgSecrets": [Function],
"listRepoSecrets": [Function],
"listRepoWorkflowRuns": [Function],
"listRepoWorkflows": [Function],
"listRunnerApplicationsForOrg": [Function],
"listRunnerApplicationsForRepo": [Function],
"listSecretsForRepo": [Function],
"listSelectedReposForOrgSecret": [Function],
"listSelfHostedRunnersForOrg": [Function],
"listSelfHostedRunnersForRepo": [Function],
"listWorkflowJobLogs": [Function],
"listWorkflowRunArtifacts": [Function],
"listWorkflowRunLogs": [Function],
"listWorkflowRuns": [Function],
"listWorkflowRunsForRepo": [Function],
"reRunWorkflow": [Function],
"removeSelectedRepoFromOrgSecret": [Function],
"removeSelfHostedRunner": [Function],
"setSelectedReposForOrgSecret": [Function],
},
"activity": Object {
"checkRepoIsStarredByAuthenticatedUser": [Function],
"checkStarringRepo": [Function],
"deleteRepoSubscription": [Function],
"deleteThreadSubscription": [Function],
"getFeeds": [Function],
"getRepoSubscription": [Function],
"getThread": [Function],
"getThreadSubscription": [Function],
"getThreadSubscriptionForAuthenticatedUser": [Function],
"listEventsForAuthenticatedUser": [Function],
"listEventsForOrg": [Function],
"listEventsForUser": [Function],
"listFeeds": [Function],
"listNotifications": [Function],
"listNotificationsForAuthenticatedUser": [Function],
"listNotificationsForRepo": [Function],
"listOrgEventsForAuthenticatedUser": [Function],
"listPublicEvents": [Function],
"listPublicEventsForOrg": [Function],
"listPublicEventsForRepoNetwork": [Function],
"listPublicEventsForUser": [Function],
"listPublicOrgEvents": [Function],
"listReceivedEventsForUser": [Function],
"listReceivedPublicEventsForUser": [Function],
"listRepoEvents": [Function],
"listRepoNotificationsForAuthenticatedUser": [Function],
"listReposStarredByAuthenticatedUser": [Function],
"listReposStarredByUser": [Function],
"listReposWatchedByUser": [Function],
"listStargazersForRepo": [Function],
"listWatchedReposForAuthenticatedUser": [Function],
"listWatchersForRepo": [Function],
"markAsRead": [Function],
"markNotificationsAsRead": [Function],
"markNotificationsAsReadForRepo": [Function],
"markRepoNotificationsAsRead": [Function],
"markThreadAsRead": [Function],
"setRepoSubscription": [Function],
"setThreadSubscription": [Function],
"starRepo": [Function],
"starRepoForAuthenticatedUser": [Function],
"unstarRepo": [Function],
"unstarRepoForAuthenticatedUser": [Function],
},
"apps": Object {
"addRepoToInstallation": [Function],
"checkAccountIsAssociatedWithAny": [Function],
"checkAccountIsAssociatedWithAnyStubbed": [Function],
"checkToken": [Function],
"createContentAttachment": [Function],
"createFromManifest": [Function],
"createInstallationAccessToken": [Function],
"createInstallationToken": [Function],
"deleteAuthorization": [Function],
"deleteInstallation": [Function],
"deleteToken": [Function],
"getAuthenticated": [Function],
"getBySlug": [Function],
"getInstallation": [Function],
"getOrgInstallation": [Function],
"getRepoInstallation": [Function],
"getSubscriptionPlanForAccount": [Function],
"getSubscriptionPlanForAccountStubbed": [Function],
"getUserInstallation": [Function],
"listAccountsForPlan": [Function],
"listAccountsForPlanStubbed": [Function],
"listAccountsUserOrOrgOnPlan": [Function],
"listAccountsUserOrOrgOnPlanStubbed": [Function],
"listInstallationReposForAuthenticatedUser": [Function],
"listInstallations": [Function],
"listInstallationsForAuthenticatedUser": [Function],
"listMarketplacePurchasesForAuthenticatedUser": [Function],
"listMarketplacePurchasesForAuthenticatedUserStubbed": [Function],
"listPlans": [Function],
"listPlansStubbed": [Function],
"listRepos": [Function],
"listReposAccessibleToInstallation": [Function],
"listSubscriptionsForAuthenticatedUser": [Function],
"listSubscriptionsForAuthenticatedUserStubbed": [Function],
"removeRepoFromInstallation": [Function],
"resetToken": [Function],
"revokeInstallationAccessToken": [Function],
"revokeInstallationToken": [Function],
"suspendInstallation": [Function],
"unsuspendInstallation": [Function],
},
"auth": [Function],
"checks": Object {
"create": [Function],
"createSuite": [Function],
"get": [Function],
"getSuite": [Function],
"listAnnotations": [Function],
"listForRef": [Function],
"listForSuite": [Function],
"listSuitesForRef": [Function],
"rerequestSuite": [Function],
"setSuitesPreferences": [Function],
"update": [Function],
},
"codeScanning": Object {
"getAlert": [Function],
"listAlertsForRepo": [Function],
},
"codesOfConduct": Object {
"getAllCodesOfConduct": [Function],
"getConductCode": [Function],
"getForRepo": [Function],
"listConductCodes": [Function],
},
"emojis": Object {
"get": [Function],
},
"gists": Object {
"checkIsStarred": [Function],
"create": [Function],
"createComment": [Function],
"delete": [Function],
"deleteComment": [Function],
"fork": [Function],
"get": [Function],
"getComment": [Function],
"getRevision": [Function],
"list": [Function],
"listComments": [Function],
"listCommits": [Function],
"listForUser": [Function],
"listForks": [Function],
"listPublic": [Function],
"listPublicForUser": [Function],
"listStarred": [Function],
"star": [Function],
"unstar": [Function],
"update": [Function],
"updateComment": [Function],
},
"git": Object {
"createBlob": [Function],
"createCommit": [Function],
"createRef": [Function],
"createTag": [Function],
"createTree": [Function],
"deleteRef": [Function],
"getBlob": [Function],
"getCommit": [Function],
"getRef": [Function],
"getTag": [Function],
"getTree": [Function],
"listMatchingRefs": [Function],
"updateRef": [Function],
},
"gitignore": Object {
"getAllTemplates": [Function],
"getTemplate": [Function],
"listTemplates": [Function],
},
"graphql": [Function],
"hook": [Function],
"interactions": Object {
"addOrUpdateRestrictionsForOrg": [Function],
"addOrUpdateRestrictionsForRepo": [Function],
"getRestrictionsForOrg": [Function],
"getRestrictionsForRepo": [Function],
"removeRestrictionsForOrg": [Function],
"removeRestrictionsForRepo": [Function],
"setRestrictionsForOrg": [Function],
"setRestrictionsForRepo": [Function],
},
"issues": Object {
"addAssignees": [Function],
"addLabels": [Function],
"checkAssignee": [Function],
"checkUserCanBeAssigned": [Function],
"create": [Function],
"createComment": [Function],
"createLabel": [Function],
"createMilestone": [Function],
"deleteComment": [Function],
"deleteLabel": [Function],
"deleteMilestone": [Function],
"get": [Function],
"getComment": [Function],
"getEvent": [Function],
"getLabel": [Function],
"getMilestone": [Function],
"list": [Function],
"listAssignees": [Function],
"listComments": [Function],
"listCommentsForRepo": [Function],
"listEvents": [Function],
"listEventsForRepo": [Function],
"listEventsForTimeline": [Function],
"listForAuthenticatedUser": [Function],
"listForOrg": [Function],
"listForRepo": [Function],
"listLabelsForMilestone": [Function],
"listLabelsForRepo": [Function],
"listLabelsOnIssue": [Function],
"listMilestones": [Function],
"listMilestonesForRepo": [Function],
"lock": [Function],
"removeAllLabels": [Function],
"removeAssignees": [Function],
"removeLabel": [Function],
"removeLabels": [Function],
"replaceAllLabels": [Function],
"replaceLabels": [Function],
"setLabels": [Function],
"unlock": [Function],
"update": [Function],
"updateComment": [Function],
"updateLabel": [Function],
"updateMilestone": [Function],
},
"licenses": Object {
"get": [Function],
"getAllCommonlyUsed": [Function],
"getForRepo": [Function],
"listCommonlyUsed": [Function],
},
"log": Object {
"debug": [Function],
"error": [Function],
"info": [Function],
"warn": [Function],
},
"markdown": Object {
"render": [Function],
"renderRaw": [Function],
},
"meta": Object {
"get": [Function],
},
"migrations": Object {
"cancelImport": [Function],
"deleteArchiveForAuthenticatedUser": [Function],
"deleteArchiveForOrg": [Function],
"downloadArchiveForOrg": [Function],
"getArchiveForAuthenticatedUser": [Function],
"getCommitAuthors": [Function],
"getImportProgress": [Function],
"getImportStatus": [Function],
"getLargeFiles": [Function],
"getStatusForAuthenticatedUser": [Function],
"getStatusForOrg": [Function],
"listForAuthenticatedUser": [Function],
"listForOrg": [Function],
"listReposForOrg": [Function],
"listReposForUser": [Function],
"mapCommitAuthor": [Function],
"setLfsPreference": [Function],
"startForAuthenticatedUser": [Function],
"startForOrg": [Function],
"startImport": [Function],
"unlockRepoForAuthenticatedUser": [Function],
"unlockRepoForOrg": [Function],
"updateImport": [Function],
},
"orgs": Object {
"addOrUpdateMembership": [Function],
"blockUser": [Function],
"checkBlockedUser": [Function],
"checkMembership": [Function],
"checkMembershipForUser": [Function],
"checkPublicMembership": [Function],
"checkPublicMembershipForUser": [Function],
"concealMembership": [Function],
"convertMemberToOutsideCollaborator": [Function],
"createHook": [Function],
"createInvitation": [Function],
"createWebhook": [Function],
"deleteHook": [Function],
"deleteWebhook": [Function],
"get": [Function],
"getHook": [Function],
"getMembership": [Function],
"getMembershipForAuthenticatedUser": [Function],
"getMembershipForUser": [Function],
"getWebhook": [Function],
"list": [Function],
"listAppInstallations": [Function],
"listBlockedUsers": [Function],
"listForAuthenticatedUser": [Function],
"listForUser": [Function],
"listHooks": [Function],
"listInstallations": [Function],
"listInvitationTeams": [Function],
"listMembers": [Function],
"listMemberships": [Function],
"listMembershipsForAuthenticatedUser": [Function],
"listOutsideCollaborators": [Function],
"listPendingInvitations": [Function],
"listPublicMembers": [Function],
"listWebhooks": [Function],
"pingHook": [Function],
"pingWebhook": [Function],
"publicizeMembership": [Function],
"removeMember": [Function],
"removeMembership": [Function],
"removeMembershipForUser": [Function],
"removeOutsideCollaborator": [Function],
"removePublicMembershipForAuthenticatedUser": [Function],
"setMembershipForUser": [Function],
"setPublicMembershipForAuthenticatedUser": [Function],
"unblockUser": [Function],
"update": [Function],
"updateHook": [Function],
"updateMembership": [Function],
"updateMembershipForAuthenticatedUser": [Function],
"updateWebhook": [Function],
},
"paginate": [Function],
"projects": Object {
"addCollaborator": [Function],
"createCard": [Function],
"createColumn": [Function],
"createForAuthenticatedUser": [Function],
"createForOrg": [Function],
"createForRepo": [Function],
"delete": [Function],
"deleteCard": [Function],
"deleteColumn": [Function],
"get": [Function],
"getCard": [Function],
"getColumn": [Function],
"getPermissionForUser": [Function],
"listCards": [Function],
"listCollaborators": [Function],
"listColumns": [Function],
"listForOrg": [Function],
"listForRepo": [Function],
"listForUser": [Function],
"moveCard": [Function],
"moveColumn": [Function],
"removeCollaborator": [Function],
"reviewUserPermissionLevel": [Function],
"update": [Function],
"updateCard": [Function],
"updateColumn": [Function],
},
"pulls": Object {
"checkIfMerged": [Function],
"create": [Function],
"createComment": [Function],
"createReplyForReviewComment": [Function],
"createReview": [Function],
"createReviewComment": [Function],
"createReviewCommentReply": [Function],
"createReviewRequest": [Function],
"deleteComment": [Function],
"deletePendingReview": [Function],
"deleteReviewComment": [Function],
"deleteReviewRequest": [Function],
"dismissReview": [Function],
"get": [Function],
"getComment": [Function],
"getCommentsForReview": [Function],
"getReview": [Function],
"getReviewComment": [Function],
"list": [Function],
"listComments": [Function],
"listCommentsForRepo": [Function],
"listCommentsForReview": [Function],
"listCommits": [Function],
"listFiles": [Function],
"listRequestedReviewers": [Function],
"listReviewComments": [Function],
"listReviewCommentsForRepo": [Function],
"listReviewRequests": [Function],
"listReviews": [Function],
"merge": [Function],
"removeRequestedReviewers": [Function],
"requestReviewers": [Function],
"submitReview": [Function],
"update": [Function],
"updateBranch": [Function],
"updateComment": [Function],
"updateReview": [Function],
"updateReviewComment": [Function],
},
"rateLimit": Object {
"get": [Function],
},
"reactions": Object {
"createForCommitComment": [Function],
"createForIssue": [Function],
"createForIssueComment": [Function],
"createForPullRequestReviewComment": [Function],
"createForTeamDiscussionCommentInOrg": [Function],
"createForTeamDiscussionInOrg": [Function],
"delete": [Function],
"deleteForCommitComment": [Function],
"deleteForIssue": [Function],
"deleteForIssueComment": [Function],
"deleteForPullRequestComment": [Function],
"deleteForTeamDiscussion": [Function],
"deleteForTeamDiscussionComment": [Function],
"deleteLegacy": [Function],
"listForCommitComment": [Function],
"listForIssue": [Function],
"listForIssueComment": [Function],
"listForPullRequestReviewComment": [Function],
"listForTeamDiscussionCommentInOrg": [Function],
"listForTeamDiscussionInOrg": [Function],
},
"repos": Object {
"acceptInvitation": [Function],
"addAppAccessRestrictions": [Function],
"addCollaborator": [Function],
"addDeployKey": [Function],
"addProtectedBranchAdminEnforcement": [Function],
"addProtectedBranchAppRestrictions": [Function],
"addProtectedBranchRequiredSignatures": [Function],
"addProtectedBranchRequiredStatusChecksContexts": [Function],
"addProtectedBranchTeamRestrictions": [Function],
"addProtectedBranchUserRestrictions": [Function],
"addStatusCheckContexts": [Function],
"addTeamAccessRestrictions": [Function],
"addUserAccessRestrictions": [Function],
"checkCollaborator": [Function],
"checkVulnerabilityAlerts": [Function],
"compareCommits": [Function],
"createCommitComment": [Function],
"createCommitSignatureProtection": [Function],
"createCommitStatus": [Function],
"createDeployKey": [Function],
"createDeployment": [Function],
"createDeploymentStatus": [Function],
"createDispatchEvent": [Function],
"createForAuthenticatedUser": [Function],
"createFork": [Function],
"createHook": [Function],
"createInOrg": [Function],
"createOrUpdateFile": [Function],
"createOrUpdateFileContents": [Function],
"createPagesSite": [Function],
"createRelease": [Function],
"createStatus": [Function],
"createUsingTemplate": [Function],
"createWebhook": [Function],
"declineInvitation": [Function],
"delete": [Function],
"deleteAccessRestrictions": [Function],
"deleteAdminBranchProtection": [Function],
"deleteBranchProtection": [Function],
"deleteCommitComment": [Function],
"deleteCommitSignatureProtection": [Function],
"deleteDeployKey": [Function],
"deleteDeployment": [Function],
"deleteDownload": [Function],
"deleteFile": [Function],
"deleteHook": [Function],
"deleteInvitation": [Function],
"deletePagesSite": [Function],
"deletePullRequestReviewProtection": [Function],
"deleteRelease": [Function],
"deleteReleaseAsset": [Function],
"deleteWebhook": [Function],
"disableAutomatedSecurityFixes": [Function],
"disablePagesSite": [Function],
"disableVulnerabilityAlerts": [Function],
"downloadArchive": [Function],
"enableAutomatedSecurityFixes": [Function],
"enablePagesSite": [Function],
"enableVulnerabilityAlerts": [Function],
"get": [Function],
"getAccessRestrictions": [Function],
"getAdminBranchProtection": [Function],
"getAllStatusCheckContexts": [Function],
"getAllTopics": [Function],
"getAppsWithAccessToProtectedBranch": [Function],
"getArchiveLink": [Function],
"getBranch": [Function],
"getBranchProtection": [Function],
"getClones": [Function],
"getCodeFrequencyStats": [Function],
"getCollaboratorPermissionLevel": [Function],
"getCombinedStatusForRef": [Function],
"getCommit": [Function],
"getCommitActivityStats": [Function],
"getCommitComment": [Function],
"getCommitSignatureProtection": [Function],
"getCommunityProfileMetrics": [Function],
"getContent": [Function],
"getContents": [Function],
"getContributorsStats": [Function],
"getDeployKey": [Function],
"getDeployment": [Function],
"getDeploymentStatus": [Function],
"getDownload": [Function],
"getHook": [Function],
"getLatestPagesBuild": [Function],
"getLatestRelease": [Function],
"getPages": [Function],
"getPagesBuild": [Function],
"getParticipationStats": [Function],
"getProtectedBranchAdminEnforcement": [Function],
"getProtectedBranchPullRequestReviewEnforcement": [Function],
"getProtectedBranchRequiredSignatures": [Function],
"getProtectedBranchRequiredStatusChecks": [Function],
"getProtectedBranchRestrictions": [Function],
"getPullRequestReviewProtection": [Function],
"getPunchCardStats": [Function],
"getReadme": [Function],
"getRelease": [Function],
"getReleaseAsset": [Function],
"getReleaseByTag": [Function],
"getStatusChecksProtection": [Function],
"getTeamsWithAccessToProtectedBranch": [Function],
"getTopPaths": [Function],
"getTopReferrers": [Function],
"getUsersWithAccessToProtectedBranch": [Function],
"getViews": [Function],
"getWebhook": [Function],
"list": [Function],
"listAssetsForRelease": [Function],
"listBranches": [Function],
"listBranchesForHeadCommit": [Function],
"listCollaborators": [Function],
"listCommentsForCommit": [Function],
"listCommitComments": [Function],
"listCommitCommentsForRepo": [Function],
"listCommitStatusesForRef": [Function],
"listCommits": [Function],
"listContributors": [Function],
"listDeployKeys": [Function],
"listDeploymentStatuses": [Function],
"listDeployments": [Function],
"listDownloads": [Function],
"listForAuthenticatedUser": [Function],
"listForOrg": [Function],
"listForUser": [Function],
"listForks": [Function],
"listHooks": [Function],
"listInvitations": [Function],
"listInvitationsForAuthenticatedUser": [Function],
"listLanguages": [Function],
"listPagesBuilds": [Function],
"listProtectedBranchRequiredStatusChecksContexts": [Function],
"listPublic": [Function],
"listPullRequestsAssociatedWithCommit": [Function],
"listReleaseAssets": [Function],
"listReleases": [Function],
"listStatusesForRef": [Function],
"listTags": [Function],
"listTeams": [Function],
"listTopics": [Function],
"listWebhooks": [Function],
"merge": [Function],
"pingHook": [Function],
"pingWebhook": [Function],
"removeAppAccessRestrictions": [Function],
"removeBranchProtection": [Function],
"removeCollaborator": [Function],
"removeDeployKey": [Function],
"removeProtectedBranchAdminEnforcement": [Function],
"removeProtectedBranchAppRestrictions": [Function],
"removeProtectedBranchPullRequestReviewEnforcement": [Function],
"removeProtectedBranchRequiredSignatures": [Function],
"removeProtectedBranchRequiredStatusChecks": [Function],
"removeProtectedBranchRequiredStatusChecksContexts": [Function],
"removeProtectedBranchRestrictions": [Function],
"removeProtectedBranchTeamRestrictions": [Function],
"removeProtectedBranchUserRestrictions": [Function],
"removeStatusCheckContexts": [Function],
"removeStatusCheckProtection": [Function],
"removeTeamAccessRestrictions": [Function],
"removeUserAccessRestrictions": [Function],
"replaceAllTopics": [Function],
"replaceProtectedBranchAppRestrictions": [Function],
"replaceProtectedBranchRequiredStatusChecksContexts": [Function],
"replaceProtectedBranchTeamRestrictions": [Function],
"replaceProtectedBranchUserRestrictions": [Function],
"replaceTopics": [Function],
"requestPageBuild": [Function],
"requestPagesBuild": [Function],
"retrieveCommunityProfileMetrics": [Function],
"setAdminBranchProtection": [Function],
"setAppAccessRestrictions": [Function],
"setStatusCheckContexts": [Function],
"setTeamAccessRestrictions": [Function],
"setUserAccessRestrictions": [Function],
"testPushHook": [Function],
"testPushWebhook": [Function],
"transfer": [Function],
"update": [Function],
"updateBranchProtection": [Function],
"updateCommitComment": [Function],
"updateHook": [Function],
"updateInformationAboutPagesSite": [Function],
"updateInvitation": [Function],
"updateProtectedBranchPullRequestReviewEnforcement": [Function],
"updateProtectedBranchRequiredStatusChecks": [Function],
"updatePullRequestReviewProtection": [Function],
"updateRelease": [Function],
"updateReleaseAsset": [Function],
"updateStatusCheckPotection": [Function],
"updateWebhook": [Function],
"uploadReleaseAsset": [Function],
},
"request": [Function],
"search": Object {
"code": [Function],
"commits": [Function],
"issuesAndPullRequests": [Function],
"labels": [Function],
"repos": [Function],
"topics": [Function],
"users": [Function],
},
"teams": Object {
"addOrUpdateMembershipForUserInOrg": [Function],
"addOrUpdateMembershipInOrg": [Function],
"addOrUpdateProjectInOrg": [Function],
"addOrUpdateProjectPermissionsInOrg": [Function],
"addOrUpdateRepoInOrg": [Function],
"addOrUpdateRepoPermissionsInOrg": [Function],
"checkManagesRepoInOrg": [Function],
"checkPermissionsForProjectInOrg": [Function],
"checkPermissionsForRepoInOrg": [Function],
"create": [Function],
"createDiscussionCommentInOrg": [Function],
"createDiscussionInOrg": [Function],
"deleteDiscussionCommentInOrg": [Function],
"deleteDiscussionInOrg": [Function],
"deleteInOrg": [Function],
"getByName": [Function],
"getDiscussionCommentInOrg": [Function],
"getDiscussionInOrg": [Function],
"getMembershipForUserInOrg": [Function],
"getMembershipInOrg": [Function],
"list": [Function],
"listChildInOrg": [Function],
"listDiscussionCommentsInOrg": [Function],
"listDiscussionsInOrg": [Function],
"listForAuthenticatedUser": [Function],
"listMembersInOrg": [Function],
"listPendingInvitationsInOrg": [Function],
"listProjectsInOrg": [Function],
"listReposInOrg": [Function],
"removeMembershipForUserInOrg": [Function],
"removeMembershipInOrg": [Function],
"removeProjectInOrg": [Function],
"removeRepoInOrg": [Function],
"reviewProjectInOrg": [Function],
"updateDiscussionCommentInOrg": [Function],
"updateDiscussionInOrg": [Function],
"updateInOrg": [Function],
},
"users": Object {
"addEmailForAuthenticated": [Function],
"addEmails": [Function],
"block": [Function],
"checkBlocked": [Function],
"checkFollowing": [Function],
"checkFollowingForUser": [Function],
"checkPersonIsFollowedByAuthenticated": [Function],
"createGpgKey": [Function],
"createGpgKeyForAuthenticated": [Function],
"createPublicKey": [Function],
"createPublicSshKeyForAuthenticated": [Function],
"deleteEmailForAuthenticated": [Function],
"deleteEmails": [Function],
"deleteGpgKey": [Function],
"deleteGpgKeyForAuthenticated": [Function],
"deletePublicKey": [Function],
"deletePublicSshKeyForAuthenticated": [Function],
"follow": [Function],
"getAuthenticated": [Function],
"getByUsername": [Function],
"getContextForUser": [Function],
"getGpgKey": [Function],
"getGpgKeyForAuthenticated": [Function],
"getPublicKey": [Function],
"getPublicSshKeyForAuthenticated": [Function],
"list": [Function],
"listBlocked": [Function],
"listBlockedByAuthenticated": [Function],
"listEmails": [Function],
"listEmailsForAuthenticated": [Function],
"listFollowedByAuthenticated": [Function],
"listFollowersForAuthenticatedUser": [Function],
"listFollowersForUser": [Function],
"listFollowingForAuthenticatedUser": [Function],
"listFollowingForUser": [Function],
"listGpgKeys": [Function],
"listGpgKeysForAuthenticated": [Function],
"listGpgKeysForUser": [Function],
"listPublicEmails": [Function],
"listPublicEmailsForAuthenticated": [Function],
"listPublicKeys": [Function],
"listPublicKeysForUser": [Function],
"listPublicSshKeysForAuthenticated": [Function],
"setPrimaryEmailVisibilityForAuthenticated": [Function],
"togglePrimaryEmailVisibility": [Function],
"unblock": [Function],
"unfollow": [Function],
"updateAuthenticated": [Function],
},
},
},
"graphStylingPane": GraphStylingPane {
"container": [Circular],
"firstFieldHasFocus": [Function],
@ -429,7 +1196,6 @@ exports[`Delete Database Confirmation Pane submit() Should call delete database
"isAutoscaleDefaultEnabled": [Function],
"isEnableMongoCapabilityPresent": [Function],
"isFixedCollectionWithSharedThroughputSupported": [Function],
"isGitHubPaneEnabled": [Function],
"isHostedDataExplorerEnabled": [Function],
"isLastCollection": [Function],
"isLastNonEmptyDatabase": [Function],
@ -447,9 +1213,14 @@ exports[`Delete Database Confirmation Pane submit() Should call delete database
"isSparkEnabledForAccount": [Function],
"isSynapseLinkUpdating": [Function],
"isTabsContentExpanded": [Function],
"junoClient": JunoClient {
"cachedPinnedRepos": [Function],
"databaseAccount": undefined,
},
"memoryUsageInfo": [Function],
"notebookBasePath": [Function],
"notebookServerInfo": [Function],
"onGitHubClientError": [Function],
"onRefreshDatabasesKeyPress": [Function],
"onRefreshResourcesClick": [Function],
"onSwitchToConnectionString": [Function],

View File

@ -607,7 +607,7 @@ export class ResourceTreeAdapter implements ReactAdapter {
gitHubNotebooksTree.contextMenu = [
{
label: "Manage GitHub settings",
onClick: () => this.container.gitHubReposPane.open(),
onClick: () => this.container.openGitHubReposPanel("Manage GitHub settings"),
},
{
label: "Disconnect from GitHub",

View File

@ -53,7 +53,6 @@ import { useConfig } from "./hooks/useConfig";
import { useKnockoutExplorer } from "./hooks/useKnockoutExplorer";
import { useSidePanel } from "./hooks/useSidePanel";
import { useTabs } from "./hooks/useTabs";
import { KOCommentEnd, KOCommentIfStart } from "./koComment";
import "./Libs/jquery";
import "./Shared/appInsights";
import { userContext } from "./UserContext";
@ -232,9 +231,6 @@ const App: React.FunctionComponent = () => {
<div data-bind='component: { name: "add-collection-pane", params: { data: addCollectionPane} }' />
<div data-bind='component: { name: "graph-styling-pane", params: { data: graphStylingPane} }' />
<div data-bind='component: { name: "cassandra-add-collection-pane", params: { data: cassandraAddCollectionPane} }' />
<KOCommentIfStart if="isGitHubPaneEnabled" />
<div data-bind='component: { name: "github-repos-pane", params: { data: gitHubReposPane } }' />
<KOCommentEnd />
{showDialog && <Dialog {...dialogProps} />}
</div>
);

View File

@ -1,20 +0,0 @@
/* eslint-disable react/prop-types */
import React, { useEffect, useRef } from "react";
export const KOCommentIfStart: React.FunctionComponent<{ if: string }> = (props) => {
const el = useRef();
useEffect(() => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(el.current as any).outerHTML = `<!-- ko if: ${props.if} -->`;
}, []);
return <div ref={el} />;
};
export const KOCommentEnd: React.FunctionComponent = () => {
const el = useRef();
useEffect(() => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(el.current as any).outerHTML = `<!-- /ko -->`;
}, []);
return <div ref={el} />;
};