diff --git a/packages/noodl-core-ui/src/components/popups/MenuDialog/MenuDialog.tsx b/packages/noodl-core-ui/src/components/popups/MenuDialog/MenuDialog.tsx
index 5bdac6a..899cfa6 100644
--- a/packages/noodl-core-ui/src/components/popups/MenuDialog/MenuDialog.tsx
+++ b/packages/noodl-core-ui/src/components/popups/MenuDialog/MenuDialog.tsx
@@ -72,7 +72,7 @@ export function MenuDialog({
hasArrow
>
- {items.map((item, i) => {
+ {items.filter(Boolean).map((item, i) => {
if (item === 'divider') return
;
if (item?.isHidden) return null;
diff --git a/packages/noodl-editor/src/editor/src/views/panels/VersionControlPanel/VersionControlPanel.tsx b/packages/noodl-editor/src/editor/src/views/panels/VersionControlPanel/VersionControlPanel.tsx
index d903989..a5a5854 100644
--- a/packages/noodl-editor/src/editor/src/views/panels/VersionControlPanel/VersionControlPanel.tsx
+++ b/packages/noodl-editor/src/editor/src/views/panels/VersionControlPanel/VersionControlPanel.tsx
@@ -33,6 +33,7 @@ import { History } from './components/History';
import { LocalChanges } from './components/LocalChanges';
import { MergeConflicts } from './components/MergeConflicts';
import { useVersionControlContext, VersionControlProvider } from './context';
+import { convertGitRemoteUrlToRepoUrl } from './github';
enum ViewState {
Default,
@@ -40,25 +41,6 @@ enum ViewState {
BranchMerge
}
-function convertGitRemoteUrlToRepoUrl(gitRemoteUrl) {
- // Remove the .git extension if present
- gitRemoteUrl = gitRemoteUrl.replace(/\.git$/, '');
-
- // Extract the repository name and owner from the URL
- const regex = /^(?:https?:\/\/)?github\.com\/([^/]+)\/([^/]+)$/;
- const match = gitRemoteUrl.match(regex);
-
- if (match) {
- const owner = match[1];
- const repo = match[2];
- // Construct the GitHub repository URL
- const repoUrl = `https://github.com/${owner}/${repo}`;
- return repoUrl;
- } else {
- throw new Error('Invalid GitHub Git remote URL');
- }
-}
-
function BaseVersionControlPanel() {
const { git, activeTabId, setActiveTabId, localChangesCount, branchStatus, fetch, updateLocalDiff } =
useVersionControlContext();
diff --git a/packages/noodl-editor/src/editor/src/views/panels/VersionControlPanel/components/HistoryCommitDiff.tsx b/packages/noodl-editor/src/editor/src/views/panels/VersionControlPanel/components/HistoryCommitDiff.tsx
index 08dc34f..d540d62 100644
--- a/packages/noodl-editor/src/editor/src/views/panels/VersionControlPanel/components/HistoryCommitDiff.tsx
+++ b/packages/noodl-editor/src/editor/src/views/panels/VersionControlPanel/components/HistoryCommitDiff.tsx
@@ -13,13 +13,15 @@ import { EventDispatcher } from '../../../../../../shared/utils/EventDispatcher'
import { ToastLayer } from '../../../ToastLayer/ToastLayer';
import { useVersionControlContext } from '../context';
import { CommitChangesDiff } from './CommitChangesDiff';
+import { convertGitRemoteUrlToCommitUrl } from '../github';
+import { platform } from '@noodl/platform';
export interface HistoryCommitDiffProps {
commit: Commit;
}
export function HistoryCommitDiff({ commit }: HistoryCommitDiffProps) {
- const { repositoryPath, localChangesCount, fetch } = useVersionControlContext();
+ const { git, repositoryPath, localChangesCount, fetch } = useVersionControlContext();
const [HaveLocalChangesDialog, showHaveLocalChangesDialog] = useConfirmationDialog({
isCancelButtonHidden: true,
@@ -71,6 +73,13 @@ export function HistoryCommitDiff({ commit }: HistoryCommitDiffProps) {
copyValueToClipboard({
value: commit.sha
})
+ },
+ git.Provider === 'github' && {
+ label: 'View on GitHub',
+ onClick: () => {
+ const commitLink = convertGitRemoteUrlToCommitUrl(git.OriginUrl, commit.sha);
+ platform.openExternal(commitLink);
+ }
}
]}
/>
diff --git a/packages/noodl-editor/src/editor/src/views/panels/VersionControlPanel/github.ts b/packages/noodl-editor/src/editor/src/views/panels/VersionControlPanel/github.ts
new file mode 100644
index 0000000..429e64f
--- /dev/null
+++ b/packages/noodl-editor/src/editor/src/views/panels/VersionControlPanel/github.ts
@@ -0,0 +1,23 @@
+export function convertGitRemoteUrlToRepoUrl(gitRemoteUrl: string): string {
+ // Remove the .git extension if present
+ gitRemoteUrl = gitRemoteUrl.replace(/\.git$/, '');
+
+ // Extract the repository name and owner from the URL
+ const regex = /^(?:https?:\/\/)?github\.com\/([^/]+)\/([^/]+)$/;
+ const match = gitRemoteUrl.match(regex);
+
+ if (match) {
+ const owner = match[1];
+ const repo = match[2];
+ // Construct the GitHub repository URL
+ const repoUrl = `https://github.com/${owner}/${repo}`;
+ return repoUrl;
+ } else {
+ throw new Error('Invalid GitHub Git remote URL');
+ }
+}
+
+export function convertGitRemoteUrlToCommitUrl(gitRemoteUrl: string, commitSha: string): string {
+ const githubLink = convertGitRemoteUrlToRepoUrl(gitRemoteUrl);
+ return `${githubLink}/commit/${commitSha}`;
+}