feat(pull_requests): make the RepositoryPullRequestsView usable
+ 119
- 9
@@ -1,5 +1,5 @@
 {
-  "_generatedAtUnix": 1665610935850,
+  "_generatedAtUnix": 1665669388427,
   "_hashAlgorithm": "sha1",
   "_version": 2,
   "islands": {

...
@@ -134,7 +134,7 @@
       "pathSource": "./app/views/repositoryPullRequests/RepositoryPullRequestCreateView.tsx"
     },
     "RepositoryPullRequestsView": {
-      "hash": "d9542080c146d970f90a3cfbf7bf76b7ea2db1a3",
+      "hash": "1ad2fff2166e8417a428852f7f4579d4f2ece30d",
       "pathSource": "./app/views/repositoryPullRequests/RepositoryPullRequestsView.tsx"
     },
     "UserDashboardView": {

app/controllers/repositoryPullRequests/postRepositoryPullRequestCreateAction.ts
@@ -113,8 +113,8 @@ const postRepositoryPullRequestCreateAction: ReqHandler = async (
     if (sourceParentOrg.slug === targetParentOrg.slug) {
       fileDiffs = await repoService.getRepositoryRefDiff(
         sourceRepo,
-        sourceRepoFromBranch,
-        targetRepoDestBranch
+        targetRepoDestBranch,
+        sourceRepoFromBranch
       );
     } else {
       fileDiffs = await repoService.getRepositoryRemoteRefDiff(

app/services/repository/getRepositoryRefDiff.ts
@@ -41,7 +41,7 @@ const makeGetRepositoryRefDiff: ServiceMethodFactory<
 
       const gitDiffRefsProcess = spawn(
         "git",
-        ["diff", `${refB}${refA != null ? `..${refA}` : ""}`],
+        ["diff", `${refA}${refB != null ? `..${refB}` : ""}`],
         {
           cwd: repoPath,
         }

app/views/repositoryPullRequests/RepositoryPullRequestsView.tsx
@@ -10,14 +10,23 @@ import { Grid, IslandWrapper, Layout, PageWrapper } from "../../components";
 // app islands
 import RepositoryHero from "../../islands/RepositoryHero";
 
+type PullRequestsFilter = "opened" | "closed" | "merged" | "all" | "search";
+
 export interface RepositoryPullRequestsViewProps extends CommonProps {
   parentOrg: Organization;
   pullRequests: PullRequest[];
   repo: RepositoryWithForkedFromRepo;
+  pullRequestsFilter?: PullRequestsFilter;
 }
 
 const RepositoryPullRequestsView: ReactView<RepositoryPullRequestsViewProps> =
-  ({ commonProps, parentOrg, pullRequests, repo }) => {
+  ({
+    commonProps,
+    parentOrg,
+    pullRequests,
+    repo,
+    pullRequestsFilter = "all",
+  }) => {
     return (
       <Layout {...commonProps}>
         <PageWrapper>

...
@@ -35,10 +44,111 @@ const RepositoryPullRequestsView: ReactView<RepositoryPullRequestsViewProps> =
               New Pull Request
             </a>
           </Grid.Col>
+          <Grid.Col fluid style={{ marginTop: 24 }}>
+            <Grid.Row fluid alignItems={"center"} gap={16}>
+              <a
+                style={{
+                  textDecoration:
+                    pullRequestsFilter === "all" ? "underline" : "none",
+                }}
+                href={`/${parentOrg.slug}/${repo.slug}/pulls?filter=${
+                  "all" as PullRequestsFilter
+                }`}
+              >
+                All
+              </a>
+              <a
+                style={{
+                  textDecoration:
+                    pullRequestsFilter === "opened" ? "underline" : "none",
+                }}
+                href={`/${parentOrg.slug}/${repo.slug}/pulls?filter=${
+                  "opened" as PullRequestsFilter
+                }`}
+              >
+                Opened
+              </a>
+              <a
+                style={{
+                  textDecoration:
+                    pullRequestsFilter === "merged" ? "underline" : "none",
+                }}
+                href={`/${parentOrg.slug}/${repo.slug}/pulls?filter=${
+                  "merged" as PullRequestsFilter
+                }`}
+              >
+                Merged
+              </a>
+              <a
+                style={{
+                  textDecoration:
+                    pullRequestsFilter === "closed" ? "underline" : "none",
+                }}
+                href={`/${parentOrg.slug}/${repo.slug}/pulls?filter=${
+                  "closed" as PullRequestsFilter
+                }`}
+              >
+                Closed
+              </a>
+            </Grid.Row>
+          </Grid.Col>
           <Grid.Col fluid style={{ marginTop: 32 }}>
-            <pre>
-              <code>{JSON.stringify(pullRequests, null, 2)}</code>
-            </pre>
+            {pullRequests != null && pullRequests.length >= 1 ? (
+              pullRequests.map((pr, idx) => (
+                <Grid.Col
+                  key={pr.id}
+                  fluid
+                  style={{ marginTop: idx === 0 ? 0 : 16 }}
+                >
+                  <a href={`/${parentOrg.slug}/${repo.slug}/pulls/${pr.uid}`}>
+                    #{pr.uid} - {pr.summary} [{pr.state}]
+                  </a>
+                  <span style={{ opacity: 0.67 }}>
+                    wants to merge <code>{pr.sourceBranch}</code> into{" "}
+                    <code>{pr.targetBranch}</code>
+                  </span>
+                  <Grid.Row
+                    fluid
+                    alignItems={"center"}
+                    style={{ opacity: 0.67, marginTop: 4 }}
+                  >
+                    {new Date(pr.createdAt).getTime() <=
+                      new Date(pr.updatedAt).getTime() && (
+                      <span>
+                        opened on {new Date(pr.createdAt).toLocaleString()}
+                      </span>
+                    )}
+                    {((pr.closedAt == null &&
+                      new Date(pr.updatedAt).getTime() >
+                        new Date(pr.createdAt).getTime()) ||
+                      (pr.closedAt != null &&
+                        new Date(pr.updatedAt).getTime() <
+                          new Date(pr.closedAt).getTime())) && (
+                      <span>
+                        updated on {new Date(pr.updatedAt).toLocaleString()}
+                      </span>
+                    )}
+                    {pr.closedAt != null && (
+                      <span>
+                        closed on
+                        {new Date(pr.closedAt).toLocaleString()}
+                      </span>
+                    )}
+                  </Grid.Row>
+                </Grid.Col>
+              ))
+            ) : (
+              <div>
+                <h1>No Pull Request Yet</h1>
+                <p>
+                  <span>Be the change you want to see, </span>
+                  <a href={`/${parentOrg.slug}/${repo.slug}/pulls/new`}>
+                    open the first Pull Request
+                  </a>
+                  <span> to this repository 🚀.</span>
+                </p>
+              </div>
+            )}
           </Grid.Col>
         </PageWrapper>
       </Layout>