Improve typeahead contact selector experience
Store and match on various phone number formats. Still not perfect, as occasionally all the models are returned for a non-matching query.
This commit is contained in:
		
					parent
					
						
							
								acc2c6f536
							
						
					
				
			
			
				commit
				
					
						d435ff003b
					
				
			
		
					 3 changed files with 21 additions and 15 deletions
				
			
		|  | @ -33,6 +33,14 @@ | |||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     splitCountryCode: function(number) { | ||||
|         var parsedNumber = libphonenumber.parse(number); | ||||
|         return { | ||||
|             country_code: parsedNumber.values_[1], | ||||
|             national_number: parsedNumber.values_[2] | ||||
|         }; | ||||
|     }, | ||||
| 
 | ||||
|     getCountryCode: function(regionCode) { | ||||
|       var cc = libphonenumber.getCountryCodeForRegion(regionCode); | ||||
|       return (cc != 0) ? cc : ""; | ||||
|  |  | |||
|  | @ -39,13 +39,15 @@ | |||
|         var missing = _.filter(required, function(attr) { return !attributes[attr]; }); | ||||
|         if (missing.length) { return "Conversation must have " + missing; } | ||||
| 
 | ||||
|         // hack
 | ||||
|         if (this.get('type') === 'private') { | ||||
|             var number = libphonenumber.util.verifyNumber(id); | ||||
|             this.id = libphonenumber.util.verifyNumber(this.id); | ||||
|             var number = libphonenumber.util.splitCountryCode(this.id); | ||||
| 
 | ||||
|             this.set({ | ||||
|                 id: number, | ||||
|                 international_number: libphonenumber.format(number, libphonenumber.PhoneNumberFormat.INTERNATIONAL), | ||||
|                 national_number: libphonenumber.format(number, libphonenumber.PhoneNumberFormat.NATIONAL) | ||||
|                 e164_number: this.id, | ||||
|                 national_number: '' + number.national_number, | ||||
|                 international_number: '' + number.country_code + number.national_number | ||||
|             }); | ||||
| 
 | ||||
|         } | ||||
|  |  | |||
|  | @ -19,19 +19,15 @@ var Whisper = Whisper || {}; | |||
|   'use strict'; | ||||
| 
 | ||||
|   var typeahead = Backbone.TypeaheadCollection.extend({ | ||||
|       typeaheadAttributes: ['name'], | ||||
|       typeaheadAttributes: [ | ||||
|         'name', | ||||
|         'e164_number', | ||||
|         'national_number', | ||||
|         'international_number' | ||||
|       ], | ||||
|       database: Whisper.Database, | ||||
|       storeName: 'conversations', | ||||
|       model: Whisper.Conversation, | ||||
| 
 | ||||
|       _tokenize: function(s) { | ||||
|           s = $.trim(s); | ||||
|           if (s.length === 0) { | ||||
|               return null; | ||||
|           } | ||||
| 
 | ||||
|           return s.toLowerCase().split(/[\s\-_+]+/); | ||||
|       } | ||||
|       model: Whisper.Conversation | ||||
|   }); | ||||
| 
 | ||||
|   Whisper.NewConversationView = Backbone.View.extend({ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 lilia
				lilia