Newer Version Available

This content describes an older version of this product. View Latest

Custom Minimized Component Code Samples

The following code sample contains examples of the component, controller, and helper code for a custom minimized embedded component using Aura.

This component:

  • Uses Aura to create an ui:button component, and binds the button click to maximize the embedded component
  • Uses an initialize function that registers the generic event handler for minimized events that updates the message depending on the event name
  • Includes optional CSS styling

Component Code

1<aura:component implements="lightningsnapin:minimizedUI" description="Custom Minimized UI">
2    <aura:handler name="init" value="{!this}" action="{!c.onInit}"/>
3    <aura:attribute name="message" type="String" default="Chat with us!"/>
4    
5	<!-- For registering our minimized event handler and maximizing -->
6	<lightningsnapin:minimizedAPI aura:id="minimizedAPI"/>
7
8	<button class="minimizedContainer"
9		onclick="{!c.handleMaximize}"
10		aura:id="minimizedContainer">
11        <div class="messageContent">
12            {!v.message}
13        </div>
14	</button>    
15</aura:component>

Controller Code

1({
2	onInit: function(cmp, evt, hlp) {
3        // Register the generic event handler for all the minimized events
4        cmp.find("minimizedAPI").registerEventHandler( hlp.minimizedEventHandler.bind(hlp, cmp));
5	},
6    
7    handleMaximize: function(cmp, evt, hlp) {
8        cmp.find("minimizedAPI").maximize();
9    }
10})

Helper Code

1({
2	minimizedEventHandler: function(cmp, eventName, eventData) {
3        switch(eventName) {
4			case "prechatState":
5				this.onPrechatState(cmp, eventData);
6				break;
7			case "offlineSupportState":
8				this.onOfflineSupportState(cmp, eventData);
9				break;
10			case "waitingState":
11				this.onWaitingState(cmp, eventData);
12				break;
13			case "queueUpdate":
14				this.onQueueUpdate(cmp, eventData);
15				break;
16			case "waitingEndedState":
17				this.onWaitingEndedState(cmp, eventData);
18				break;
19			case "chatState":
20				this.onChatState(cmp, eventData);
21				break;
22			case "chatTimeoutUpdate":
23				this.onChatTimeoutUpdate(cmp, eventData);
24				break;
25			case "chatUnreadMessage":
26				this.onChatUnreadMessage(cmp, eventData);
27				break;
28			case "chatTransferringState":
29				this.onChatTransferringState(cmp, eventData);
30				break;
31			case "chatEndedState":
32				this.onChatEndedState(cmp, eventData);
33				break;
34			case "reconnectingState":
35				this.onReconnectingState(cmp, eventData);
36				break;
37			case "postchatState":
38				this.onPostchatState(cmp, eventData);
39				break;
40			default:
41				throw new Error("Received unexpected minimized event '" + eventName + "'.");
42		}
43	},
44
45	/**
46	 * "prechatState" event handler. This fires when pre-chat state is initialized.
47	 *
48	 * @param {Aura.Component} cmp - This component.
49	 * @param {Object} eventData - The data associated with the event. Always contains a "label" property.
50	 */
51	onPrechatState: function(cmp, eventData) {
52		this.setMinimizedContent(cmp, eventData.label);
53	},
54
55	/**
56	 * "offlineSupportState" event handler. This fires when offline support state is initialized.
57	 *
58	 * @param {Aura.Component} cmp - This component.
59	 * @param {Object} eventData - The data associated with the event. Always contains a "label" property.
60	 */
61	onOfflineSupportState: function(cmp, eventData) {
62		this.setMinimizedContent(cmp, eventData.label);
63	},
64
65	/**
66	 * "waitingState" and "queueUpdate" are fired when EITHER
67	 * 1) waiting state is initialized, either with a new session or via page navigation or refresh, OR
68	 * 2) the visitor was previously in reconnecting, and they've regained connection.
69	 *
70	 * Only one of "waitingState" and "queueUpdate" is ever fired - never both.
71	 * - "waitingState" is fired if EITHER queue position is DISABLED, OR snippet version under 5.0.
72	 * - "queueUpdate" is fired if queue position is ENABLED, AND snippet version is 5.0 or later.
73	 */
74
75	/**
76	 * "waitingState" event handler. See above doc.
77	 *
78	 * @param {Aura.Component} cmp - This component.
79	 * @param {Object} eventData - The data associated with the event. Always contains a "label" property.
80	 */
81	onWaitingState: function(cmp, eventData) {
82		this.setMinimizedContent(cmp, eventData.label);
83	},
84
85	/**
86	 * "queueUpdate" event handler. See above doc.
87	 *
88	 * @param {Aura.Component} cmp - This component.
89	 * @param {Object} eventData - Event data. For this event, this contains label and queuePosition.
90	 */
91	onQueueUpdate: function(cmp, eventData) {
92		this.setMinimizedContent(cmp, eventData.label + " " + eventData.queuePosition);
93	},
94
95	/**
96	 * "waitingEndedState" event handler. This fires in waiting state when the chat request fails.
97	 *
98	 * @param {SampleCustomMinimizedUI.SampleCustomMinimizedUIComponent} cmp - This component.
99	 * @param {Object} eventData - Event data. For this event, this contains label and reason. We don't use reason though.
100	 */
101	onWaitingEndedState: function(cmp, eventData) {
102		this.setMinimizedContent(cmp, eventData.label);
103	},
104
105	/**
106	 * "chatState" event handler. This fires when EITHER
107	 * 1) chat state is initialized, either with a new session or via page navigation or refresh, OR
108	 * 2) the visitor was previously in chat transfer, and they've been connected to a new agent, OR
109	 * 3) the visitor was previously in reconnecting, and they've regained connection.
110	 *
111	 * @param {Aura.Component} cmp - This component.
112	 * @param {Object} eventData - The data associated with the event. Always contains a "label" property.
113	 */
114	onChatState: function(cmp, eventData) {
115		this.setMinimizedContent(cmp, eventData.label);
116	},
117
118	/**
119	 * "chatTimeoutUpdate" event handler. This fires when the visitor idle timeout has started.
120	 *
121	 * @param {Aura.Component} cmp - This component.
122	 * @param {Object} eventData - Event data. For this event, this contains label and timeoutSecondsRemaining.
123	 */
124	onChatTimeoutUpdate: function(cmp, eventData) {
125		this.setMinimizedContent(cmp, eventData.label);
126	},
127
128	/**
129	 * "chatUnreadMessage" event handler. This fires when the agent sends a message but the visitor hasn't seen it
130	 * yet, either because they are scrolled up in the chat message area, or because the widget is minimized.
131	 *
132	 * @param {Aura.Component} cmp - This component.
133	 * @param {Object} eventData - Event data. For this event, this contains label and unreadMessageCount.
134	 */
135	onChatUnreadMessage: function(cmp, eventData) {
136		this.setMinimizedContent(cmp, eventData.label);
137	},
138
139	/**
140	 * "chatTransferringState" event handler. This fires when a chat transfer has been initiated.
141	 *
142	 * @param {Aura.Component} cmp - This component.
143	 * @param {Object} eventData - The data associated with the event. Always contains a "label" property.
144	 */
145	onChatTransferringState: function(cmp, eventData) {
146		this.setMinimizedContent(cmp, eventData.label);
147	},
148
149	/**
150	 * "chatEndedState" event handler. This fires in chat state when the chat ends for any reason.
151	 *
152	 * @param {Aura.Component} cmp - This component.
153	 * @param {Object} eventData - Event data. For this event, this contains label and reason.
154	 */
155	onChatEndedState: function(cmp, eventData) {
156		this.setMinimizedContent(cmp, eventData.label);
157	},
158
159	/**
160	 * "reconnectingState" event handler. This fires in both waiting and chat state when the visitor loses connection.
161	 *
162	 * @param {Aura.Component} cmp - This component.
163	 * @param {Object} eventData - The data associated with the event. Always contains a "label" property.
164	 */
165	onReconnectingState: function(cmp, eventData) {
166		this.setMinimizedContent(cmp, eventData.label);
167	},
168
169	/**
170	 * "postchatState" event handler. This fires when the visitor enters post chat by clicking "Give Feedback".
171	 *
172	 * @param {Aura.Component} cmp - This component.
173	 * @param {Object} eventData - The data associated with the event. Always contains a "label" property.
174	 */
175	onPostchatState: function(cmp, eventData) {
176		this.setMinimizedContent(cmp, eventData.label);
177	},
178
179	/**
180	 * Update the contents of the sample minimized component.
181	 *
182	 * @param {Aura.Component} cmp - This component.
183	 * @param {String} message - The text to display.
184	 */
185	setMinimizedContent: function(cmp, message) {
186		cmp.set("v.message", message);
187	}
188});

CSS Code

1.THIS {
2	position: fixed;
3	left: auto;
4	bottom: 0;
5	right: 12px;
6	margin: 0;
7 	min-width: 12em;
8	max-width: 14em;
9	height: 46px;
10	width: 192px;
11	max-height: 100%;
12	border-radius: 8px 8px 0 0;
13	text-align: center;
14	text-decoration: none;
15	display: flex;
16	flex-direction: center;
17justify-content: center;
18box-shadow: none;
19	pointer-events: all;
20	overflow: hidden;
21	background-color: rgb(0, 112, 210);
22	font-size: 16px;
23}
24
25.THIS.minimizedContainer:focus,
26.THIS.minimizedContainer:hover {
27color: rgb(255, 255, 255);
28text-decoration: underline;
29outline: none;
30background-color: rgb(0, 95, 178);
31box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.5);
32}
33
34.THIS .messageContent {
35	display: block;
36	padding: 0 8px;
37	height: 100%;
38	color: rgb(255, 255, 255);
39}