1+ <aura:component extends="c.fieldMetadata" controller="LookupController">
2+
3+ <!-- Public Config Attributes -->
4+ <aura:attribute name="record" type="SObject" default="{}" />
5+ <aura:attribute name="disabled" type="Boolean" description="(Optional) Disables the input field" />
6+ <aura:attribute name="required" type="Boolean" description="(Optional) Marks the field as required (true) or optional (false)" />
7+ <aura:attribute name="limitCount" type="Integer" default="5" description="Total number of records to return" />
8+
9+ <!-- Private Selected Record Attributes -->
10+ <aura:attribute name="selectedParentRecordId" type="Id" access="private" />
11+ <aura:attribute name="selectedParentRecord" type="SObject" access="private" />
12+
13+ <!-- Private SObject Selector Attributes -->
14+ <aura:attribute name="showSObjectSelector" type="Boolean" access="private" default="false" />
15+ <aura:attribute name="parentSObjectName" type="String" access="private" />
16+ <aura:attribute name="parentSObjectMetadata" type="Object" access="private" />
17+
18+ <!-- Private Search Result Attributes -->
19+ <aura:attribute name="showSearchResults" type="Boolean" access="private" default="false" />
20+ <aura:attribute name="searchResults" type="Object[]" access="private" />
21+
22+ <!-- Handlers -->
23+ <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
24+ <aura:handler name="change" value="{!v.fieldMetadata}" action="{!c.parseFieldMetadata}" />
25+ <aura:handler name="change" value="{!v.selectedParentRecordId}" action="{!c.loadSelectedParentRecord}" />
26+ <aura:handler name="change" value="{!v.parentSObjectName}" action="{!c.loadParentSObjectMetadata}" />
27+
28+ <!-- Markup -->
29+ <div class="slds-form-element">
30+ <div class="slds-form-element__control">
31+ <div class="slds-combobox_container slds-has-object-switcher">
32+ <!-- SObject Switcher -->
33+ <aura:if isTrue="{! and(empty(v.selectedParentRecord), v.fieldMetadata.relationshipReferences.length > 1)}">
34+ <div class="slds-listbox_object-switcher slds-dropdown-trigger slds-dropdown-trigger_click slds-is-open">
35+ <button class="slds-button slds-button_icon" aria-haspopup="true" title="Select object to search in" onclick="{!c.toggleParentSObjectSelector}">
36+ <lightning:icon iconName="{!v.parentSObjectMetadata.tabIcon}" size="small" />
37+ <lightning:icon iconName="utility:down" size="x-small" />
38+ </button>
39+ <aura:if isTrue="{!v.showSObjectSelector}">
40+ <div class="slds-dropdown slds-dropdown_left slds-dropdown_small">
41+ <ul class="slds-dropdown__list" role="menu">
42+ <aura:iteration items="{!v.fieldMetadata.relationshipReferences}" var="relationshipReference">
43+ <aura:if isTrue="{!relationshipReference.isAccessible}">
44+ <li class="slds-dropdown__item slds-is-selected" role="presentation">
45+ <a href="javascript:void(0);" role="menuitemcheckbox" aria-checked="true" tabindex="0" data-sobjectname="{!relationshipReference.name}" onclick="{!c.selectParentSObject}">
46+ <span class="slds-truncate" title="{!relationshipReference.labelPlural}">
47+ <lightning:icon iconName="{!relationshipReference.tabIcon}" size="large" />
48+ {!relationshipReference.labelPlural}
49+ </span>
50+ </a>
51+ </li>
52+ </aura:if>
53+ </aura:iteration>
54+ </ul>
55+ </div>
56+ </aura:if>
57+ </div>
58+ </aura:if>
59+ <!-- Search Box -->
60+ <div class="slds-combobox slds-dropdown-trigger slds-dropdown-trigger_click" aria-expanded="false" aria-haspopup="listbox" role="combobox">
61+ <div class="slds-combobox__form-element slds-input-has-icon slds-input-has-icon_right" role="none">
62+ <aura:if isTrue="{!empty(v.selectedParentRecord)}">
63+ <input
64+ aria-autocomplete="list"
65+ aria-controls="listbox-unique-id"
66+ autocomplete="off"
67+ class="slds-input slds-combobox__input"
68+ disabled="{!or(empty(v.parentSObjectMetadata), v.fieldMetadata.isUpdateable == false, v.disabled)}"
69+ id="combobox-unique-id"
70+ onfocus="{!c.fetchSearchResults}"
71+ onkeyup="{!c.fetchSearchResults}"
72+ placeholder="{! if(empty(v.parentSObjectMetadata), '', 'Search ' + v.parentSObjectMetadata.labelPlural) }"
73+ required="{!or(v.required, v.fieldMetadata.required)}"
74+ role="textbox"
75+ type="text"
76+ />
77+ <span class="slds-icon_container slds-icon-utility-search slds-input__icon slds-input__icon_right">
78+ <lightning:icon iconName="utility:search" size="x-small" />
79+ </span>
80+ <aura:set attribute="else">
81+ <span class="slds-pill slds-pill_link">
82+ <a href="javascript:void(0);" class="slds-pill__action slds-p-left_x-small" title="{#v.selectedParentRecord.displayText}">
83+ <lightning:icon iconName="{!v.parentSObjectMetadata.tabIcon}" size="x-small" />
84+ <span class="slds-pill__label slds-p-left_x-small">{#v.selectedParentRecord.displayText}</span>
85+ </a>
86+ <button class="slds-button slds-button_icon slds-button_icon slds-pill__remove" title="Remove" onclick="{!c.clearSelection}" >
87+ <lightning:icon iconName="utility:close" size="small" />
88+ <span class="slds-assistive-text">Remove</span>
89+ </button>
90+ </span>
91+ </aura:set>
92+ </aura:if>
93+ </div>
94+ <!-- Search Results -->
95+ <aura:if isTrue="{!and(v.showSearchResults, greaterthan(v.searchResults.length, 0))}">
96+ <div id="listbox-unique-id" role="listbox">
97+ <ul role="presentation" class="slds-listbox slds-listbox_vertical slds-dropdown slds-dropdown_fluid slds-is-open" style="display:block; min-width:auto; max-width:100%; width:100%;">
98+ <aura:iteration items="{!v.searchResults}" var="matchingRecord" indexVar="i">
99+ <li role="presentation" class="slds-listbox__item" data-selectedparentindex="{#i}" onclick="{!c.parentRecordSelected}">
100+ <span role="option" class="slds-media slds-listbox__option slds-listbox__option_entity slds-listbox__option_has-meta">
101+ <span class="slds-media__figure optionIcon">
102+ <span class="slds-icon_container" >
103+ <lightning:icon iconName="{#v.parentSObjectMetadata.tabIcon}" size="small" />
104+ <span class="slds-assistive-text">{!v.parentSObjectMetadata.label}</span>
105+ </span>
106+ </span>
107+ <span class="slds-media__body">
108+ <span class="slds-listbox__option-text slds-listbox__option-text_entity">{!matchingRecord.displayText}</span>
109+ </span>
110+ </span>
111+ </li>
112+ </aura:iteration>
113+ </ul>
114+ </div>
115+ </aura:if>
116+ </div>
117+ </div>
118+ </div>
119+ </div>
120+ </aura:component>
0 commit comments