Author: Andrew Mc Cormack
Provides a has_one Link object with the following options:
- Anchor link
 - Internal Link
 - External Link
 - Telephone
 - File
 - Image
 - Link target (_blank etc)
 
Add the following to your composer.json file and run /dev/buid?flush=all
{  
    "require": {  
        "cyber-duck/silverstripe-linkitemfield": "4.1.*"
    }
}The field references a has_one LinkItem relation on a DataObject. Make sure to include both the field and object namespaces in your class.
use CyberDuck\LinkItemField\Forms\LinkItemField;
use CyberDuck\LinkItemField\Model\LinkItem;
use SilverStripe\ORM\DataObject;
class MyObject extends DataObject 
{
    private static has_one = [
        'MyRelation' => LinkItem::class
    ];
}The field can easily be added to an DataObject / extension through getCMSFields() / updateCMSFields() or similar.
$fields->addFieldToTab('Root.Main', LinkItemField::create('MyRelationID', 'My Relation Title'));The relation will expose 3 properties in your template - Link, Title, and Target.
<% with MyRelation %>
<a href="$Link" target="$Target">$Title</a>
<% end_with %>When calling Link the outputted URL will be formatted depending on the Link type
<a href="#{TheURL}">For Anchor</a>
<a href="{TheURL}">For Internal</a>
<a href="{TheURL}">For External</a>
<a href="mailto:{TheURL}">For Email</a>
<a href="tel:+{TheURL}">For Telephone</a>
<a href="{TheURL}">For File</a>
<a href="{TheURL}">For Image</a>- Add React