This is an automated email from the ASF dual-hosted git repository.
tiagobento pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git
The following commit(s) were added to refs/heads/main by this push:
new f81d29d478f kie-issues#129: "Open in KIE Sandbox" button doesn't work
in a private repository (#2109)
f81d29d478f is described below
commit f81d29d478fc9b054f8b155eee42861145e93820
Author: Jozef Marko <[email protected]>
AuthorDate: Tue Jan 9 20:57:10 2024 +0100
kie-issues#129: "Open in KIE Sandbox" button doesn't work in a private
repository (#2109)
---
packages/chrome-extension/src/app/Dependencies.ts | 3 +++
.../openRepoInExternalEditorApp.tsx | 18 ++++++++--------
.../src/app/components/single/singleEditorView.tsx | 11 +++++++++-
.../src/app/github/GitHubPageType.ts | 2 +-
packages/chrome-extension/src/app/utils.ts | 13 ++++++++++++
packages/chrome-extension/src/index.ts | 20 ++++++++++++------
packages/chrome-extension/tests/index.test.ts | 24 +++++++++++-----------
7 files changed, 63 insertions(+), 28 deletions(-)
diff --git a/packages/chrome-extension/src/app/Dependencies.ts
b/packages/chrome-extension/src/app/Dependencies.ts
index a77357e9d7c..1b6faac1bed 100644
--- a/packages/chrome-extension/src/app/Dependencies.ts
+++ b/packages/chrome-extension/src/app/Dependencies.ts
@@ -61,6 +61,9 @@ export class Dependencies {
};
public readonly openRepoInExternalEditor = {
+ buttonContainerOnRepoHome: () => {
+ return document.querySelector("#repository-details-container
.pagehead-actions") as HTMLElement | null;
+ },
buttonContainerOnRepoFilesList: () => {
return document.querySelector(".d-flex.gap-2")?.parentElement as
HTMLElement | null;
},
diff --git
a/packages/chrome-extension/src/app/components/openRepoInExternalEditor/openRepoInExternalEditorApp.tsx
b/packages/chrome-extension/src/app/components/openRepoInExternalEditor/openRepoInExternalEditorApp.tsx
index 22f4d97cf5d..e3869e23508 100644
---
a/packages/chrome-extension/src/app/components/openRepoInExternalEditor/openRepoInExternalEditorApp.tsx
+++
b/packages/chrome-extension/src/app/components/openRepoInExternalEditor/openRepoInExternalEditorApp.tsx
@@ -20,15 +20,15 @@
import * as React from "react";
import * as ReactDOM from "react-dom";
import { Globals, Main } from "../common/Main";
-import { createAndGetMainContainer, openRepoInExternalEditorContainer,
removeAllChildren } from "../../utils";
+import {
+ createAndGetMainContainer,
+ openRepoInExternalEditorContainer,
+ openRepoInExternalEditorContainerFromRepositoryHome,
+ removeAllChildren,
+} from "../../utils";
import { OpenInExternalEditorButton } from "./OpenInExternalEditorButton";
import { GitHubPageType } from "../../github/GitHubPageType";
-import {
- KOGITO_IFRAME_CONTAINER_PR_CLASS,
- KOGITO_OPEN_REPO_IN_EXTERNAL_EDITOR_CONTAINER_CLASS,
- KOGITO_TOOLBAR_CONTAINER_PR_CLASS,
- KOGITO_VIEW_ORIGINAL_LINK_CONTAINER_PR_CLASS,
-} from "../../constants";
+import { KOGITO_OPEN_REPO_IN_EXTERNAL_EDITOR_CONTAINER_CLASS } from
"../../constants";
export function renderOpenRepoInExternalEditorApp(
args: Globals & { className: string; pageType: GitHubPageType; container: ()
=> HTMLElement }
@@ -50,7 +50,9 @@ export function renderOpenRepoInExternalEditorApp(
>
{ReactDOM.createPortal(
<OpenInExternalEditorButton className={args.className}
pageType={args.pageType} />,
- openRepoInExternalEditorContainer(args.id, args.container())
+ GitHubPageType.REPO_HOME === args.pageType
+ ? openRepoInExternalEditorContainerFromRepositoryHome(args.id,
args.container())
+ : openRepoInExternalEditorContainer(args.id, args.container())
)}
</Main>,
createAndGetMainContainer(args.id, args.dependencies.all.body()),
diff --git
a/packages/chrome-extension/src/app/components/single/singleEditorView.tsx
b/packages/chrome-extension/src/app/components/single/singleEditorView.tsx
index 26f0d93f545..1bbcbc60697 100644
--- a/packages/chrome-extension/src/app/components/single/singleEditorView.tsx
+++ b/packages/chrome-extension/src/app/components/single/singleEditorView.tsx
@@ -23,6 +23,7 @@ import {
extractOpenFileExtension,
extractOpenFilePath,
iframeFullscreenContainer,
+ openRepoInExternalEditorContainer,
removeAllChildren,
waitForElementToBeReady,
} from "../../utils";
@@ -35,6 +36,8 @@ import { KOGITO_IFRAME_CONTAINER_CLASS,
KOGITO_TOOLBAR_CONTAINER_CLASS } from ".
import { fetchFile } from "../../github/api";
import { useGitHubApi } from "../common/GitHubContext";
import { useGlobals } from "../common/GlobalContext";
+import { OpenInExternalEditorButton } from
"../openRepoInExternalEditor/OpenInExternalEditorButton";
+import { GitHubPageType } from "../../github/GitHubPageType";
export interface FileInfo {
repo: string;
@@ -43,7 +46,9 @@ export interface FileInfo {
gitRef: string;
}
-export async function renderSingleEditorReadonlyApp(args: Globals & {
fileInfo: FileInfo }) {
+export async function renderSingleEditorReadonlyApp(
+ args: Globals & { className: string; pageType: GitHubPageType; container: ()
=> HTMLElement; fileInfo: FileInfo }
+) {
// wait for the dom element to be ready before rendering
await waitForElementToBeReady("textarea[id='read-only-cursor-text-area']");
// Checking whether this text editor exists is a good way to determine if
the page is "ready",
@@ -80,6 +85,10 @@ export async function renderSingleEditorReadonlyApp(args:
Globals & { fileInfo:
resourceContentServiceFactory={args.resourceContentServiceFactory}
externalEditorManager={args.externalEditorManager}
>
+ {ReactDOM.createPortal(
+ <OpenInExternalEditorButton className={args.className}
pageType={args.pageType} />,
+ openRepoInExternalEditorContainer(args.id, args.container())
+ )}
<SingleEditorViewApp fileInfo={args.fileInfo}
openFileExtension={openFileExtension} />
</Main>,
createAndGetMainContainer(args.id, args.dependencies.all.body()!),
diff --git a/packages/chrome-extension/src/app/github/GitHubPageType.ts
b/packages/chrome-extension/src/app/github/GitHubPageType.ts
index e323bf23fe6..b1e7d78d1c0 100644
--- a/packages/chrome-extension/src/app/github/GitHubPageType.ts
+++ b/packages/chrome-extension/src/app/github/GitHubPageType.ts
@@ -21,7 +21,7 @@ export enum GitHubPageType {
VIEW,
EDIT,
PR_FILES_OR_COMMITS,
- CAN_OPEN_REPO_IN_EXTERNAL_EDITOR,
ANY,
PR_HOME,
+ REPO_HOME,
}
diff --git a/packages/chrome-extension/src/app/utils.ts
b/packages/chrome-extension/src/app/utils.ts
index b8c145c6900..9811e8b1c11 100644
--- a/packages/chrome-extension/src/app/utils.ts
+++ b/packages/chrome-extension/src/app/utils.ts
@@ -111,6 +111,19 @@ export function openRepoInExternalEditorContainer(id:
string, container: HTMLEle
return element();
}
+export function openRepoInExternalEditorContainerFromRepositoryHome(id:
string, container: HTMLElement) {
+ const element = () =>
document.querySelector(`.${KOGITO_OPEN_REPO_IN_EXTERNAL_EDITOR_CONTAINER_CLASS}.${id}`)!;
+
+ if (!element()) {
+ container.insertAdjacentHTML(
+ "beforeend",
+ `<li><div class="${KOGITO_OPEN_REPO_IN_EXTERNAL_EDITOR_CONTAINER_CLASS}
${id}"></div></li>`
+ );
+ }
+
+ return element();
+}
+
export function extractOpenFileExtension(url: string) {
return url
.split(".")
diff --git a/packages/chrome-extension/src/index.ts
b/packages/chrome-extension/src/index.ts
index 68101799e1d..054185bd0a2 100644
--- a/packages/chrome-extension/src/index.ts
+++ b/packages/chrome-extension/src/index.ts
@@ -99,7 +99,13 @@ function init(globals: Globals) {
if (pageType === GitHubPageType.EDIT) {
renderSingleEditorApp({ ...globals, fileInfo });
} else if (pageType === GitHubPageType.VIEW) {
- renderSingleEditorReadonlyApp({ ...globals, fileInfo });
+ renderSingleEditorReadonlyApp({
+ ...globals,
+ pageType,
+ className: "btn ml-2 d-none d-md-block",
+ container: () =>
globals.dependencies.openRepoInExternalEditor.buttonContainerOnRepoFilesList()!,
+ fileInfo,
+ });
} else if (pageType === GitHubPageType.PR_FILES_OR_COMMITS) {
renderPrEditorsApp({ ...globals });
} else if (pageType === GitHubPageType.PR_HOME) {
@@ -109,12 +115,12 @@ function init(globals: Globals) {
className: "btn btn-sm",
container: () =>
globals.dependencies.openRepoInExternalEditor.buttonContainerOnPrs()!,
});
- } else if (pageType === GitHubPageType.CAN_OPEN_REPO_IN_EXTERNAL_EDITOR) {
+ } else if (pageType === GitHubPageType.REPO_HOME) {
renderOpenRepoInExternalEditorApp({
...globals,
pageType,
- className: "btn ml-2 d-none d-md-block",
- container: () =>
globals.dependencies.openRepoInExternalEditor.buttonContainerOnRepoFilesList()!,
+ className: "btn btn-sm",
+ container: () =>
globals.dependencies.openRepoInExternalEditor.buttonContainerOnRepoHome()!,
});
} else {
throw new Error(`Unknown GitHubPageType ${pageType}`);
@@ -172,9 +178,11 @@ export function discoverCurrentGitHubPageType() {
}
const isOrgSlashRepo = window.location.pathname.split("/").length === 3;
+ const isOrgSlashRepoSlashTreeSlashName =
+ window.location.pathname.split("/tree/").length === 2 &&
!window.location.pathname.split("/tree/")[1].includes("/");
- if (pathnameMatches(`/.*/.*/tree/.*`) || isOrgSlashRepo) {
- return GitHubPageType.CAN_OPEN_REPO_IN_EXTERNAL_EDITOR;
+ if (isOrgSlashRepo || isOrgSlashRepoSlashTreeSlashName) {
+ return GitHubPageType.REPO_HOME;
}
if (pathnameMatches(`.*/.*/pull/[0-9]+/files.*`)) {
diff --git a/packages/chrome-extension/tests/index.test.ts
b/packages/chrome-extension/tests/index.test.ts
index 5359ba66916..54b5563ee4c 100644
--- a/packages/chrome-extension/tests/index.test.ts
+++ b/packages/chrome-extension/tests/index.test.ts
@@ -53,6 +53,18 @@ describe("discoverCurrentGitHubPageType", () => {
expect(type).toStrictEqual(GitHubPageType.EDIT);
});
+ test("repo home", async () => {
+ setWindowLocationPathname("github.com/organization/repositoryName");
+ const type = index.discoverCurrentGitHubPageType();
+ expect(type).toStrictEqual(GitHubPageType.REPO_HOME);
+ });
+
+ test("repo home with branch", async () => {
+
setWindowLocationPathname("github.com/organization/repositoryName/tree/main");
+ const type = index.discoverCurrentGitHubPageType();
+ expect(type).toStrictEqual(GitHubPageType.REPO_HOME);
+ });
+
test("pr home", async () => {
setWindowLocationPathname("/org/repo/pull/1");
const type = index.discoverCurrentGitHubPageType();
@@ -71,18 +83,6 @@ describe("discoverCurrentGitHubPageType", () => {
expect(type).toStrictEqual(GitHubPageType.PR_FILES_OR_COMMITS);
});
- test("tree repo", async () => {
- setWindowLocationPathname("/user/repo/tree/some_ref");
- const type = index.discoverCurrentGitHubPageType();
-
expect(type).toStrictEqual(GitHubPageType.CAN_OPEN_REPO_IN_EXTERNAL_EDITOR);
- });
-
- test("tree repo root", async () => {
- setWindowLocationPathname("/user/repo");
- const type = index.discoverCurrentGitHubPageType();
-
expect(type).toStrictEqual(GitHubPageType.CAN_OPEN_REPO_IN_EXTERNAL_EDITOR);
- });
-
test("any", async () => {
setWindowLocationPathname("/");
const type = index.discoverCurrentGitHubPageType();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]