Radish alpha
r
Radicle desktop app
Radicle
Git (anonymous pull)
Log in to clone via SSH
Highlight accepted and rejected reviews
Brandon Oxendine committed 1 month ago
commit 45bb52180b103893328442a01ae8ffd88e6d8d07
parent 6f9eb0b8dfa727ef08d52246fe8b37f6929413e0
2 files changed +49 -6
modified src/components/PatchActivityItem.svelte
@@ -64,6 +64,26 @@
  .timestamp {
    color: var(--color-text-quaternary);
  }
+
  .verdict-accept {
+
    background-color: var(--color-feedback-success-bg);
+
    color: var(--color-feedback-success-text);
+
    padding: 0.375rem 0.5rem;
+
    border-radius: var(--border-radius-sm);
+
  }
+
  .verdict-accept,
+
  .verdict-accept :global(*) {
+
    color: var(--color-feedback-success-text);
+
  }
+
  .verdict-reject {
+
    background-color: var(--color-feedback-error-bg);
+
    color: var(--color-feedback-error-text);
+
    padding: 0.375rem 0.5rem;
+
    border-radius: var(--border-radius-sm);
+
  }
+
  .verdict-reject,
+
  .verdict-reject :global(*) {
+
    color: var(--color-feedback-error-text);
+
  }
</style>

{#if op.type === "revision"}
@@ -228,8 +248,8 @@
    </div>
  {/if}
{:else if op.type === "review"}
-
  <div class="timeline-item txt-body-m-regular">
-
    {#if op.verdict === "accept"}
+
  {#if op.verdict === "accept"}
+
    <div class="timeline-item txt-body-m-regular verdict-accept">
      <div class="icon" style:color="var(--color-feedback-success-text)">
        <Icon name="thumbs-up" />
      </div>
@@ -237,12 +257,17 @@
        <NodeId {...authorForNodeId(op.author)} />
        <div class="summary-line">
          accepted revision <Id id={op.revision} clipboard={op.revision} />
+
          {#if op.summary && op.summary.trim() !== ""}
+
            — {op.summary}
+
          {/if}
        </div>
        <div class="timestamp" title={absoluteTimestamp(op.timestamp)}>
          {formatTimestamp(op.timestamp)}
        </div>
      </div>
-
    {:else if op.verdict === "reject"}
+
    </div>
+
  {:else if op.verdict === "reject"}
+
    <div class="timeline-item txt-body-m-regular verdict-reject">
      <div class="icon" style:color="var(--color-feedback-error-text)">
        <Icon name="stop" />
      </div>
@@ -250,12 +275,17 @@
        <NodeId {...authorForNodeId(op.author)} />
        <div class="summary-line">
          rejected revision <Id id={op.revision} clipboard={op.revision} />
+
          {#if op.summary && op.summary.trim() !== ""}
+
            — {op.summary}
+
          {/if}
        </div>
        <div class="timestamp" title={absoluteTimestamp(op.timestamp)}>
          {formatTimestamp(op.timestamp)}
        </div>
      </div>
-
    {:else if op.verdict === undefined}
+
    </div>
+
  {:else if op.verdict === undefined}
+
    <div class="timeline-item txt-body-m-regular">
      <div class="icon">
        <Icon name="comment" />
      </div>
@@ -268,6 +298,6 @@
          {formatTimestamp(op.timestamp)}
        </div>
      </div>
-
    {/if}
-
  </div>
+
    </div>
+
  {/if}
{/if}
modified src/components/Revision.svelte
@@ -98,6 +98,13 @@
      return items;
    },
  );
+
  const reviewSummaryFingerprints = $derived(
+
    new Set(
+
      (revision.reviews ?? [])
+
        .filter(r => r.summary && r.summary.trim() !== "")
+
        .map(r => `${r.author.did} ${r.summary}`),
+
    ),
+
  );
  const commentThreads = $derived(
    ((revision.discussion &&
      revision.discussion
@@ -106,6 +113,12 @@
            (comment.id !== revision.id && !comment.replyTo) ||
            comment.replyTo === revision.id,
        )
+
        .filter(comment => {
+
          const body = comment.edits[comment.edits.length - 1]?.body ?? "";
+
          return !reviewSummaryFingerprints.has(
+
            `${comment.author.did} ${body}`,
+
          );
+
        })
        .map(thread => {
          return {
            root: thread,