({
group,
isOpen,
toggleOpen,
}: {
group: RelatedValuesGroup;
isOpen: boolean;
toggleOpen: () => void;
})
| 60 | } |
| 61 | |
| 62 | function RelatedValuesGroupItem({ |
| 63 | group, |
| 64 | isOpen, |
| 65 | toggleOpen, |
| 66 | }: { |
| 67 | group: RelatedValuesGroup; |
| 68 | isOpen: boolean; |
| 69 | toggleOpen: () => void; |
| 70 | }) { |
| 71 | const isLinkable = group.value !== "undefined"; |
| 72 | const isHighlighted = group.value === "undefined" || group.value === "null"; |
| 73 | |
| 74 | return ( |
| 75 | <div className="mb-1 transition dark:text-slate-300"> |
| 76 | <div |
| 77 | className={`flex rounded-sm transition hover:cursor-pointer ${ |
| 78 | isOpen |
| 79 | ? "bg-slate-200 hover:bg-slate-200 dark:bg-slate-700 dark:hover:bg-slate-700" |
| 80 | : "bg-slate-100 hover:bg-slate-200 dark:bg-slate-600 dark:hover:bg-slate-700" |
| 81 | }`} |
| 82 | onClick={() => toggleOpen()} |
| 83 | > |
| 84 | <div className="flex items-center rounded-sm px-1 bg-slate-200 dark:bg-slate-700"> |
| 85 | {isOpen ? ( |
| 86 | <ChevronDownIcon className="w-3 h-3" /> |
| 87 | ) : ( |
| 88 | <ChevronRightIcon className="w-3 h-3" /> |
| 89 | )} |
| 90 | <SmallBody className="ml-1">{group.paths.length}</SmallBody> |
| 91 | </div> |
| 92 | <Mono |
| 93 | className={`truncate px-2 text-slate-700 dark:text-slate-200 ${ |
| 94 | isHighlighted ? "italic" : "" |
| 95 | }`} |
| 96 | > |
| 97 | {group.value} |
| 98 | </Mono> |
| 99 | </div> |
| 100 | {isOpen && |
| 101 | group.paths.map((path) => { |
| 102 | return ( |
| 103 | <div |
| 104 | className="p-0.5 bg-slate-100 dark:bg-slate-700 dark:bg-opacity-60" |
| 105 | key={path} |
| 106 | > |
| 107 | <PathLink path={path} enabled={isLinkable} /> |
| 108 | </div> |
| 109 | ); |
| 110 | })} |
| 111 | </div> |
| 112 | ); |
| 113 | } |
| 114 | |
| 115 | function PathLink({ path, enabled }: { path: string; enabled: boolean }) { |
| 116 | const [json] = useJson(); |
nothing calls this directly
no test coverage detected