Skip to content

Commit

Permalink
feat: Version control commit, View on GitHub (noodlapp#17)
Browse files Browse the repository at this point in the history
* feat: Version control commit, View on GitHub

* fix: MenuDialog allow undefined menu item

This makes it a lot easier to create conditional menu items
  • Loading branch information
erictuvesson authored May 14, 2024
1 parent 13c9277 commit 4e09a70
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ export function MenuDialog({
hasArrow
>
<div className={classNames(css['Root'], css[width])} style={{ maxHeight: UNSAFE_maxHeight }}>
{items.map((item, i) => {
{items.filter(Boolean).map((item, i) => {
if (item === 'divider') return <div className={css['Divider']} key={i} />;
if (item?.isHidden) return null;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,32 +33,14 @@ 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,
Branches,
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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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);
}
}
]}
/>
Expand Down
Original file line number Diff line number Diff line change
@@ -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}`;
}

0 comments on commit 4e09a70

Please sign in to comment.