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