Radish alpha
r
rad:z4D5UCArafTzTQpDZNQRuqswh3ury
Radicle desktop app
Radicle
Git
Small issue related tweaks
Open rudolfs opened 1 year ago

See commit messages.

check

👉 Workflow runs 👉 Branch on GitHub

13 files changed +97 -37 6ff895e9 9bed71d6
modified src/components/Avatar.svelte
@@ -1,7 +1,7 @@
<script lang="ts">
  import { createIcon } from "@app/lib/blockies";

-
  export let nodeId: string;
+
  export let publicKey: string;

  function createContainer(source: string) {
    const seed = source.toLowerCase();
@@ -27,4 +27,8 @@
  }
</style>

-
<img title={nodeId} src={createContainer(nodeId)} class="avatar" alt="avatar" />
+
<img
+
  title={publicKey}
+
  src={createContainer(publicKey)}
+
  class="avatar"
+
  alt="avatar" />
modified src/components/Icon.svelte
@@ -9,6 +9,7 @@
    | "arrow-right"
    | "checkmark"
    | "chevron-right"
+
    | "comment"
    | "copy"
    | "cross"
    | "dashboard"
@@ -98,6 +99,19 @@
    <path d="M7 10L8 10L8 11L7 11L7 10Z" />
    <path d="M9 8L10 8V9L9 9V8Z" />
    <path d="M8 9H9V10H8L8 9Z" />
+
  {:else if name === "comment"}
+
    <path d="M4 2H12V3H4V2Z" />
+
    <path d="M12 3L13 3V4H12V3Z" />
+
    <path d="M12 10H13V11H12V10Z" />
+
    <path d="M3 3L4 3V4H3V3Z" />
+
    <path d="M5 11H12V12H5V11Z" />
+
    <path d="M3 13H4V14H3V13Z" />
+
    <path d="M4 12H5V13H4L4 12Z" />
+
    <path d="M5 11H6V12H5V11Z" />
+
    <path d="M13 4H14V10H13V4Z" />
+
    <path d="M2 4L3 4L3 13H2V4Z" />
+
    <path d="M5 5H11V6H5V5Z" />
+
    <path d="M5 8H11V9H5V8Z" />
  {:else if name === "copy"}
    <path d="M6.5 2H13.5V3H6.5V2Z" />
    <path d="M3.5 5H4.5V6H3.5V5Z" />
modified src/components/IssueTeaser.svelte
@@ -2,6 +2,7 @@
  import type { Issue } from "@bindings/Issue";

  import {
+
    authorForNodeId,
    formatOid,
    formatTimestamp,
    issueStatusBackgroundColor,
@@ -68,9 +69,7 @@
      style:align-items="flex-start">
      <InlineTitle content={issue.title} />
      <div class="global-flex txt-small">
-
        <NodeId
-
          nodeId={issue.author.did.replace("did:key:", "")}
-
          alias={issue.author.alias} />
+
        <NodeId {...authorForNodeId(issue.author)} />
        opened
        <div class="global-oid">{formatOid(issue.id)}</div>
        {formatTimestamp(issue.timestamp)}
@@ -81,5 +80,12 @@
    {#each issue.labels as label}
      <div class="global-counter txt-small">{label}</div>
    {/each}
+

+
    {#if issue.discussion.length > 1}
+
      <div class="txt-small global-flex" style:gap="0.25rem">
+
        <Icon name="comment" />
+
        {issue.discussion.length - 1}
+
      </div>
+
    {/if}
  </div>
</div>
modified src/components/NodeId.svelte
@@ -3,8 +3,9 @@

  import Avatar from "./Avatar.svelte";

-
  export let nodeId: string;
+
  export let publicKey: string;
  export let alias: string | undefined = undefined;
+

  export let styleFontSize: string | undefined = "var(--font-size-small)";
  export let styleFontFamily: string | undefined =
    "var(--font-family-monospace)";
@@ -26,14 +27,14 @@
  class="avatar-alias"
  style:font-size={styleFontSize}
  style:font-family={styleFontFamily}>
-
  <Avatar {nodeId} />
+
  <Avatar {publicKey} />
  {#if alias}
    <span class="txt-overflow">
      {alias}
    </span>
  {:else}
    <span class="no-alias">
-
      {truncateId(nodeId)}
+
      {truncateId(publicKey)}
    </span>
  {/if}
</div>
modified src/components/PatchTeaser.svelte
@@ -3,6 +3,7 @@
  import type { Stats } from "@bindings/Stats";

  import {
+
    authorForNodeId,
    formatOid,
    formatTimestamp,
    patchStatusBackgroundColor,
@@ -82,9 +83,7 @@
      style:align-items="flex-start">
      <InlineTitle content={patch.title} />
      <div class="global-flex txt-small">
-
        <NodeId
-
          nodeId={patch.author.did.replace("did:key:", "")}
-
          alias={patch.author.alias} />
+
        <NodeId {...authorForNodeId(patch.author)} />
        opened
        <div class="global-oid">{formatOid(patch.id)}</div>
        {formatTimestamp(patch.timestamp)}
modified src/components/RepoCard.svelte
@@ -43,7 +43,7 @@
      {#if project.data.description}
        {project.data.description}
      {:else}
-
        No description
+
        No description.
      {/if}
    </div>
    <div class="global-oid">{formatRepositoryId(repo.rid)}</div>
modified src/lib/utils.ts
@@ -1,9 +1,14 @@
+
import type { ComponentProps } from "svelte";
+

+
import type { Author } from "@bindings/Author";
import type { Issue } from "@bindings/Issue";
import type { Patch } from "@bindings/Patch";

import bs58 from "bs58";
import twemojiModule from "twemoji";

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

export const unreachable = (value: never): never => {
  throw new Error(`Unreachable code: ${value}`);
};
@@ -38,6 +43,14 @@ export function truncateId(pubkey: string): string {
  return `${pubkey.substring(0, 6)}…${pubkey.slice(-6)}`;
}

+
export function truncateDid(did: string): string {
+
  return `did:key:${truncateId(publicKeyFromDid(did))}`;
+
}
+

+
export function publicKeyFromDid(did: string) {
+
  return did.replace("did:key:", "");
+
}
+

export function isCommit(input: string): boolean {
  return /^[a-f0-9]{40}$/.test(input);
}
@@ -137,3 +150,7 @@ export const patchStatusBackgroundColor: Record<
  archived: "var(--color-fill-private)",
  merged: "var(--color-fill-delegate)",
};
+

+
export function authorForNodeId(author: Author): ComponentProps<NodeId> {
+
  return { publicKey: publicKeyFromDid(author.did), alias: author.alias };
+
}
modified src/views/Home.svelte
@@ -42,7 +42,7 @@
      </svelte:fragment>
      <svelte:fragment slot="breadcrumbs">
        <NodeId
-
          nodeId={config.publicKey}
+
          publicKey={config.publicKey}
          alias={config.alias}
          styleFontFamily="var(--font-family-sans-serif)"
          styleFontSize="var(--font-size-tiny)" />
modified src/views/repo/CreateIssue.svelte
@@ -84,7 +84,7 @@
  <svelte:fragment slot="breadcrumbs">
    <Link route={{ resource: "home" }}>
      <NodeId
-
        nodeId={config.publicKey}
+
        publicKey={config.publicKey}
        alias={config.alias}
        styleFontFamily="var(--font-family-sans-serif)"
        styleFontSize="var(--font-size-tiny)" />
@@ -161,7 +161,9 @@
    {#if preview}
      <div class="txt-small body">
        {#if description.trim() === ""}
-
          <span class="txt-missing">No description.</span>
+
          <span class="txt-missing" style:line-height="1.625rem">
+
            No description.
+
          </span>
        {:else}
          <Markdown rid={repo.rid} content={description} breaks />
        {/if}
modified src/views/repo/Issue.svelte
@@ -5,7 +5,13 @@

  import capitalize from "lodash/capitalize";

-
  import { formatTimestamp, formatOid, issueStatusColor } from "@app/lib/utils";
+
  import {
+
    authorForNodeId,
+
    formatOid,
+
    formatTimestamp,
+
    issueStatusColor,
+
    truncateDid,
+
  } from "@app/lib/utils";

  import Border from "@app/components/Border.svelte";
  import CopyableId from "@app/components/CopyableId.svelte";
@@ -78,7 +84,7 @@
  <svelte:fragment slot="breadcrumbs">
    <Link route={{ resource: "home" }}>
      <NodeId
-
        nodeId={config.publicKey}
+
        publicKey={config.publicKey}
        alias={config.alias}
        styleFontFamily="var(--font-family-sans-serif)"
        styleFontSize="var(--font-size-tiny)" />
@@ -178,9 +184,7 @@
        <div class="section-title">Assignees</div>
        <div class="global-flex" style:flex-wrap="wrap">
          {#each issue.assignees as assignee}
-
            <NodeId
-
              nodeId={assignee.did.replace("did:key:", "")}
-
              alias={assignee.alias} />
+
            <NodeId {...authorForNodeId(assignee)} />
          {:else}
            <span class="txt-missing">Not assigned to anyone.</span>
          {/each}
@@ -189,22 +193,30 @@
    </Border>

    <div class="txt-small body">
+
      <div class="global-flex txt-small" style:margin-bottom="1rem">
+
        <NodeId {...authorForNodeId(issue.author)} />
+
        opened
+
        <div class="global-oid">{formatOid(issue.id)}</div>
+
        {formatTimestamp(issue.timestamp)}
+
        {#if issue.discussion[0].edits.length > 1}
+
          {@const lastEdit = issue.discussion[0].edits.slice(-1)[0]}
+
          <span
+
            class="txt-missing"
+
            title={`${lastEdit.author.alias ? lastEdit.author.alias : truncateDid(lastEdit.author.did)} edited ${new Date(Number(lastEdit.timestamp)).toLocaleString()}`}>
+
            • edited
+
          </span>
+
        {/if}
+
      </div>
      {#if issue.discussion[0].edits.slice(-1)[0].body.trim() === ""}
-
        <span class="txt-missing">No description.</span>
+
        <span class="txt-missing" style:line-height="1.625rem">
+
          No description.
+
        </span>
      {:else}
        <Markdown
          rid={repo.rid}
          breaks
          content={issue.discussion[0].edits.slice(-1)[0].body} />
      {/if}
-
      <div class="global-flex txt-small" style:margin-top="1.5rem">
-
        <NodeId
-
          nodeId={issue.author.did.replace("did:key:", "")}
-
          alias={issue.author.alias} />
-
        opened
-
        <div class="global-oid">{formatOid(issue.id)}</div>
-
        {formatTimestamp(issue.timestamp)}
-
      </div>
    </div>
  </div>
</Layout>
modified src/views/repo/Issues.svelte
@@ -46,7 +46,7 @@
  <svelte:fragment slot="breadcrumbs">
    <Link route={{ resource: "home" }}>
      <NodeId
-
        nodeId={config.publicKey}
+
        publicKey={config.publicKey}
        alias={config.alias}
        styleFontFamily="var(--font-family-sans-serif)"
        styleFontSize="var(--font-size-tiny)" />
modified src/views/repo/Patch.svelte
@@ -4,7 +4,12 @@
  import type { RepoInfo } from "@bindings/RepoInfo";
  import type { Revision } from "@bindings/Revision";

-
  import { formatTimestamp, formatOid, patchStatusColor } from "@app/lib/utils";
+
  import {
+
    authorForNodeId,
+
    formatOid,
+
    formatTimestamp,
+
    patchStatusColor,
+
  } from "@app/lib/utils";

  import Border from "@app/components/Border.svelte";
  import CopyableId from "@app/components/CopyableId.svelte";
@@ -58,7 +63,7 @@
  <svelte:fragment slot="breadcrumbs">
    <Link route={{ resource: "home" }}>
      <NodeId
-
        nodeId={config.publicKey}
+
        publicKey={config.publicKey}
        alias={config.alias}
        styleFontFamily="var(--font-family-sans-serif)"
        styleFontSize="var(--font-size-tiny)" />
@@ -136,12 +141,12 @@
          breaks
          content={revisions[0].description.slice(-1)[0].body} />
      {:else}
-
        <span class="txt-missing">No description.</span>
+
        <span class="txt-missing" style:line-height="1.625rem">
+
          No description.
+
        </span>
      {/if}
      <div class="global-flex txt-small" style:margin-top="1.5rem">
-
        <NodeId
-
          nodeId={patch.author.did.replace("did:key:", "")}
-
          alias={patch.author.alias} />
+
        <NodeId {...authorForNodeId(patch.author)} />
        opened
        <div class="global-oid">{formatOid(patch.id)}</div>
        {formatTimestamp(patch.timestamp)}
modified src/views/repo/Patches.svelte
@@ -56,7 +56,7 @@
  <svelte:fragment slot="breadcrumbs">
    <Link route={{ resource: "home" }}>
      <NodeId
-
        nodeId={config.publicKey}
+
        publicKey={config.publicKey}
        alias={config.alias}
        styleFontFamily="var(--font-family-sans-serif)"
        styleFontSize="var(--font-size-tiny)" />