on master help sign in
urbit.org/components/JoinGroup.js
79 lines 3.1 kB history raw
1import { useCopyToClipboard } from "../lib/hooks";
3export default function Contact({ emphasize, groupName, label, className }) {
4 const [copyStatus, copy] = useCopyToClipboard(groupName);
6 const linkText = emphasize ? "text-green-400" : "text-wall-600";
7 const border = emphasize ? "border-green-400" : "border-wall-600";
8 const washedBg = emphasize ? "bg-green-100" : "bg-wall-100";
9 const iconColor = emphasize ? "#00B171" : "#24221E";
11 const buttonIcon =
12 copyStatus === "inactive" ? (
13 <svg
14 width="16"
15 height="16"
16 viewBox="0 0 16 16"
17 fill="none"
18 xmlns="http://www.w3.org/2000/svg"
19 >
20 <path
21 fillRule="evenodd"
22 clipRule="evenodd"
23 d="M3.2 1.6C3.2 0.716344 3.91634 0 4.8 0H11.3615L14.9333 2.38124V12.2667C14.9333 13.1503 14.217 13.8667 13.3333 13.8667H12.8V14.4C12.8 15.2837 12.0837 16 11.2 16H2.66667C1.78301 16 1.06667 15.2837 1.06667 14.4V3.73333C1.06667 2.84968 1.78301 2.13333 2.66667 2.13333H3.2V1.6ZM3.2 3.2H2.66667C2.37211 3.2 2.13333 3.43878 2.13333 3.73333V14.4C2.13333 14.6946 2.37211 14.9333 2.66667 14.9333H11.2C11.4946 14.9333 11.7333 14.6946 11.7333 14.4V13.8667H4.8C3.91634 13.8667 3.2 13.1503 3.2 12.2667V3.2Z"
24 fill={iconColor}
25 />
26 </svg>
27 ) : copyStatus === "copied" ? (
28 <svg
29 width="16"
30 height="16"
31 viewBox="0 0 16 16"
32 fill="none"
33 xmlns="http://www.w3.org/2000/svg"
34 >
35 <path
36 fillRule="evenodd"
37 clipRule="evenodd"
38 d="M0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8ZM7.54325 11.4247L12.1498 5.66647L11.3169 5.00013L7.39013 9.90859L4.60812 7.59025L3.92526 8.40969L7.54325 11.4247Z"
39 fill={iconColor}
40 />
41 </svg>
42 ) : (
43 <svg
44 width="16"
45 height="16"
46 viewBox="0 0 16 16"
47 fill="none"
48 xmlns="http://www.w3.org/2000/svg"
49 >
50 <path
51 fillRule="evenodd"
52 clipRule="evenodd"
53 d="M0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8ZM10.8229 11.5772L8.00004 8.75429L5.17716 11.5772L4.42292 10.8229L7.24579 8.00004L4.42292 5.17716L5.17716 4.42292L8.00004 7.24579L10.8229 4.42292L11.5772 5.17716L8.75429 8.00004L11.5772 10.8229L10.8229 11.5772Z"
54 fill={iconColor}
55 />
56 </svg>
57 );
59 return (
60 <div className={className}>
61 <h4 className="text-wall-500 flex items-baseline flex-wrap">
62 {label ? label + " " : ""}
63 <div className="rounded-lg flex items-stretch">
64 <code
65 className={`rounded-l-lg px-2 md:px-4 py-2 ${washedBg} flex items-center h-full ${linkText}`}
66 >
67 {groupName}
68 </code>
69 <button
70 className={`rounded-r-lg px-4 ml-0.5 flex-1 flex justify-center items-center ${washedBg}`}
71 onClick={() => copy()}
72 >
73 {buttonIcon}
74 </button>
75 </div>
76 </h4>
77 </div>
78 );