(props: Props)
| 48 | ` |
| 49 | |
| 50 | export default function Link(props: Props) { |
| 51 | const viewer = useFragment(viewerFragment, props.viewer) |
| 52 | const link = useFragment(linkFragment, props.link) |
| 53 | const [formIsOpen, setFormIsOpen] = useState(false) |
| 54 | |
| 55 | const toggleForm = useCallback(() => { |
| 56 | setFormIsOpen(!formIsOpen) |
| 57 | }, [setFormIsOpen, formIsOpen]) |
| 58 | |
| 59 | const parentTopics = liftNodes<ParentTopicType>(link.displayParentTopics) |
| 60 | const showEditButton = !link.loading && link.viewerCanUpdate |
| 61 | const repoColors = (link.repoLinks || []).map((repoLink) => repoLink.displayColor as Color) |
| 62 | const canEdit = !!(link.viewerCanUpdate && viewer.selectedRepoId) |
| 63 | |
| 64 | return ( |
| 65 | <Item |
| 66 | canEdit={canEdit} |
| 67 | className="Box-row--link" |
| 68 | formIsOpen={formIsOpen} |
| 69 | newlyAdded={link.newlyAdded} |
| 70 | repoColors={repoColors} |
| 71 | showEditButton={showEditButton} |
| 72 | showLink |
| 73 | showRepoOwnership={link.showRepoOwnership} |
| 74 | title={link.displayTitle} |
| 75 | toggleForm={toggleForm} |
| 76 | topics={parentTopics} |
| 77 | url={link.displayUrl} |
| 78 | > |
| 79 | {formIsOpen && viewer.id && ( |
| 80 | <EditLinkLoader |
| 81 | linkId={link.id} |
| 82 | viewerId={viewer.id} |
| 83 | /> |
| 84 | )} |
| 85 | </Item> |
| 86 | ) |
| 87 | } |
nothing calls this directly
no test coverage detected