@@ -167,6 +167,224 @@ export default () => {
167
167
} )
168
168
}
169
169
170
+ // -------------------------------
171
+ // Aurocomplete
172
+ // -------------------------------
173
+ // 'Autocomplete components' example in docs only
174
+ // js-docs-start autocomplete-array-data
175
+ const myAutoComplete = document . getElementById ( 'myAutoComplete' )
176
+
177
+ if ( myAutoComplete ) {
178
+ new coreui . Autocomplete ( myAutoComplete , {
179
+ name : 'autocomplete' ,
180
+ options : [
181
+ 'Angular' ,
182
+ 'Bootstrap' ,
183
+ {
184
+ label : 'React.js' ,
185
+ disabled : true
186
+ } ,
187
+ 'Vue.js' ,
188
+ {
189
+ label : 'backend' ,
190
+ options : [ 'Django' , 'Laravel' , 'Node.js' ]
191
+ }
192
+ ] ,
193
+ value : 'Laravel'
194
+ } )
195
+ }
196
+ // js-docs-end autocomplete-array-data
197
+
198
+ // js-docs-start autocomplete-grouped-data
199
+ const myAutoCompleteGrouped = document . getElementById ( 'myAutoCompleteGrouped' )
200
+
201
+ if ( myAutoCompleteGrouped ) {
202
+ new coreui . Autocomplete ( myAutoCompleteGrouped , {
203
+ name : 'autocomplete-grouped' ,
204
+ options : [
205
+ 'Angular' ,
206
+ {
207
+ label : 'Bootstrap' ,
208
+ selected : true
209
+ } ,
210
+ {
211
+ label : 'React.js' ,
212
+ disabled : true
213
+ } ,
214
+ 'Vue.js' ,
215
+ {
216
+ label : 'backend' ,
217
+ options : [ 'Django' , 'Laravel' , 'Node.js' ]
218
+ }
219
+ ]
220
+ } )
221
+ }
222
+ // js-docs-end autocomplete-grouped-data
223
+
224
+ // js-docs-start autocomplete-external-data
225
+ const myAutoCompleteExternalData = document . getElementById ( 'myAutoCompleteExternalData' )
226
+
227
+ if ( myAutoCompleteExternalData ) {
228
+ const getUsers = async ( name = '' ) => {
229
+ try {
230
+ const response = await fetch ( `https://apitest.coreui.io/demos/users?first_name=${ name } &limit=10` )
231
+ const users = await response . json ( )
232
+
233
+ return users . records . map ( user => ( {
234
+ value : user . id ,
235
+ label : user . first_name
236
+ } ) )
237
+ } catch ( error ) {
238
+ // eslint-disable-next-line no-console
239
+ console . error ( 'Error fetching users:' , error )
240
+ }
241
+ }
242
+
243
+ const autocomplete = new coreui . Autocomplete ( myAutoCompleteExternalData , {
244
+ cleaner : true ,
245
+ highlightOptionsOnSearch : true ,
246
+ name : 'autocomplete-external' ,
247
+ options : [ ] ,
248
+ placeholder : 'Search names...' ,
249
+ search : [ 'external' , 'global' ] , // 🔴 'external' is required for external search
250
+ showHints : true
251
+ } )
252
+
253
+ let lastQuery = null
254
+ let debounceTimer = null
255
+
256
+ myAutoCompleteExternalData . addEventListener ( 'show.coreui.autocomplete' , async ( ) => {
257
+ const users = await getUsers ( )
258
+ autocomplete . update ( { options : users } )
259
+ } )
260
+
261
+ myAutoCompleteExternalData . addEventListener ( 'input.coreui.autocomplete' , event => {
262
+ const query = event . value
263
+
264
+ if ( query === lastQuery ) {
265
+ return
266
+ }
267
+
268
+ lastQuery = query
269
+
270
+ clearTimeout ( debounceTimer )
271
+
272
+ debounceTimer = setTimeout ( async ( ) => {
273
+ const users = await getUsers ( query )
274
+ autocomplete . update ( { options : users } )
275
+ } , 200 )
276
+ } )
277
+ }
278
+ // js-docs-end autocomplete-external-data
279
+
280
+ // js-docs-start autocomplete-custom-options
281
+ const myAutocompleteCountries = document . getElementById ( 'myAutocompleteCountries' )
282
+ const myAutocompleteCountriesAndCities = document . getElementById ( 'myAutocompleteCountriesAndCities' )
283
+
284
+ if ( myAutocompleteCountries && myAutocompleteCountriesAndCities ) {
285
+ const countries = [
286
+ {
287
+ value : 'pl' ,
288
+ label : 'Poland' ,
289
+ flag : '🇵🇱'
290
+ } ,
291
+ {
292
+ value : 'de' ,
293
+ label : 'Germany' ,
294
+ flag : '🇩🇪'
295
+ } ,
296
+ {
297
+ value : 'us' ,
298
+ label : 'United States' ,
299
+ flag : '🇺🇸'
300
+ } ,
301
+ {
302
+ value : 'es' ,
303
+ label : 'Spain' ,
304
+ flag : '🇪🇸'
305
+ } ,
306
+ {
307
+ value : 'gb' ,
308
+ label : 'United Kingdom' ,
309
+ flag : '🇬🇧'
310
+ }
311
+ ]
312
+
313
+ const cities = [
314
+ {
315
+ label : 'United States' ,
316
+ code : 'us' ,
317
+ flag : '🇺🇸' ,
318
+ options : [
319
+ {
320
+ value : 'au' ,
321
+ label : 'Austin'
322
+ } ,
323
+ {
324
+ value : 'ch' ,
325
+ label : 'Chicago'
326
+ } ,
327
+ {
328
+ value : 'la' ,
329
+ label : 'Los Angeles'
330
+ } ,
331
+ {
332
+ value : 'ny' ,
333
+ label : 'New York'
334
+ } ,
335
+ {
336
+ value : 'sa' ,
337
+ label : 'San Jose'
338
+ }
339
+ ]
340
+ } ,
341
+ {
342
+ label : 'United Kingdom' ,
343
+ code : 'gb' ,
344
+ flag : '🇬🇧' ,
345
+ options : [
346
+ {
347
+ value : 'li' ,
348
+ label : 'Liverpool'
349
+ } ,
350
+ {
351
+ value : 'lo' ,
352
+ label : 'London'
353
+ } ,
354
+ {
355
+ value : 'ma' ,
356
+ label : 'Manchester'
357
+ }
358
+ ]
359
+ }
360
+ ]
361
+
362
+ new coreui . Autocomplete ( myAutocompleteCountries , {
363
+ cleaner : true ,
364
+ indicator : true ,
365
+ options : countries ,
366
+ optionsTemplate ( option ) {
367
+ return `<div class="d-flex align-items-center gap-2"><span class="fs-5">${ option . flag } </span><span>${ option . label } </span></div>`
368
+ } ,
369
+ placeholder : 'Select country' ,
370
+ showHints : true ,
371
+ search : 'global'
372
+ } )
373
+
374
+ new coreui . Autocomplete ( myAutocompleteCountriesAndCities , {
375
+ cleaner : true ,
376
+ indicator : true ,
377
+ options : cities ,
378
+ optionsGroupsTemplate ( optionGroup ) {
379
+ return `<div class="d-flex align-items-center gap-2"><span class="text-body fs-5">${ optionGroup . flag } </span><span>${ optionGroup . label } </span></div>`
380
+ } ,
381
+ placeholder : 'Select city' ,
382
+ showHints : true ,
383
+ search : 'global'
384
+ } )
385
+ }
386
+ // js-docs-end autocomplete-custom-options
387
+
170
388
// -------------------------------
171
389
// Multi Selects
172
390
// -------------------------------
0 commit comments