Radish alpha
r
rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5
Radicle web interface
Radicle
Git
radicle-explorer src views repos Cob Reviews.svelte
<script lang="ts">
  import type { BaseUrl } from "@http-client";
  import type { PatchReviews } from "../Patch.svelte";

  import Icon from "@app/components/Icon.svelte";
  import NodeId from "@app/components/NodeId.svelte";

  export let baseUrl: BaseUrl;
  export let reviews: PatchReviews;

  $: sortedReviews = Array.from(Object.values(reviews)).sort((a, b) => {
    if (a.latest === b.latest) {
      return 0;
    } else if (b.latest) {
      return 1;
    } else {
      return -1;
    }
  });
</script>

<style>
  .header {
    font: var(--txt-body-m-regular);
    margin-bottom: 0.75rem;
  }
  .body {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    font: var(--txt-body-m-regular);
  }
  .review {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
  }
  .review-accept {
    color: var(--color-text-open);
  }
  .review-reject {
    color: var(--color-feedback-error-text);
  }
  .review-missing {
    color: var(--color-text-tertiary);
  }
  .review-missing .review-accept,
  .review-missing .review-reject {
    color: var(--color-text-tertiary);
  }
  @media (max-width: 1349.98px) {
    .wrapper {
      display: flex;
      flex-direction: row;
      gap: 1rem;
      align-items: center;
    }
    .header {
      margin-bottom: 0;
      height: 2rem;
      display: flex;
      align-items: center;
    }
    .no-reviews {
      display: flex;
      align-items: center;
    }
    .body {
      flex-direction: row;
    }
  }
</style>

<div class="wrapper">
  <div class="header">Reviews</div>
  <div class="body">
    {#each sortedReviews as { latest, review }}
      <div
        class="review"
        class:review-missing={!latest}
        title={!latest
          ? `This review was on a previous revision. Please ask ${review.author.alias} to re-review`
          : ""}>
        <span
          class:review-accept={review.verdict === "accept"}
          class:review-reject={review.verdict === "reject"}>
          {#if review.verdict === "accept"}
            <Icon name="comment-checkmark" />
          {:else if review.verdict === "reject"}
            <Icon name="comment-cross" />
          {:else}
            <Icon name="comment" />
          {/if}
        </span>
        <NodeId
          {baseUrl}
          nodeId={review.author.id}
          alias={review.author.alias} />
      </div>
    {:else}
      <div class="no-reviews" style:color="var(--color-text-tertiary)">
        No reviews
      </div>
    {/each}
  </div>
</div>