Add some autocomplete workarounds for new vendor catalog batch
when user selects a parser, it may auto-select the vendor, but keeping that all in sync is complicated. this seems to be an improvement but it could likely use more..
This commit is contained in:
		
							parent
							
								
									a36f775752
								
							
						
					
					
						commit
						b261e8bb9b
					
				
					 5 changed files with 60 additions and 21 deletions
				
			
		|  | @ -251,6 +251,9 @@ class JQueryAutocompleteWidget(dfwidget.AutocompleteInputWidget): | ||||||
|     service_url = None |     service_url = None | ||||||
|     cleared_callback = None |     cleared_callback = None | ||||||
|     selected_callback = None |     selected_callback = None | ||||||
|  |     input_callback = None | ||||||
|  |     new_label_callback = None | ||||||
|  |     ref = None | ||||||
| 
 | 
 | ||||||
|     default_options = ( |     default_options = ( | ||||||
|         ('autoFocus', True), |         ('autoFocus', True), | ||||||
|  | @ -277,6 +280,9 @@ class JQueryAutocompleteWidget(dfwidget.AutocompleteInputWidget): | ||||||
|         kw['field_display'] = self.field_display |         kw['field_display'] = self.field_display | ||||||
|         kw['cleared_callback'] = self.cleared_callback |         kw['cleared_callback'] = self.cleared_callback | ||||||
|         kw['assigned_label'] = self.assigned_label |         kw['assigned_label'] = self.assigned_label | ||||||
|  |         kw['input_callback'] = self.input_callback | ||||||
|  |         kw['new_label_callback'] = self.new_label_callback | ||||||
|  |         kw['ref'] = self.ref | ||||||
|         kw.setdefault('selected_callback', self.selected_callback) |         kw.setdefault('selected_callback', self.selected_callback) | ||||||
|         tmpl_values = self.get_template_values(field, cstruct, kw) |         tmpl_values = self.get_template_values(field, cstruct, kw) | ||||||
|         template = readonly and self.readonly_template or self.template |         template = readonly and self.readonly_template or self.template | ||||||
|  |  | ||||||
|  | @ -95,21 +95,21 @@ const TailboneAutocomplete = { | ||||||
|         } |         } | ||||||
|     }, |     }, | ||||||
| 
 | 
 | ||||||
|     watch: { |     // watch: {
 | ||||||
|         // TODO: yikes this feels hacky.  what happens is, when the
 |     //     // TODO: yikes this feels hacky.  what happens is, when the
 | ||||||
|         // caller explicitly assigns a new UUID value to the tailbone
 |     //     // caller explicitly assigns a new UUID value to the tailbone
 | ||||||
|         // autocomplate component, the underlying buefy autocomplete
 |     //     // autocomplate component, the underlying buefy autocomplete
 | ||||||
|         // component was not getting the new value.  so here we are
 |     //     // component was not getting the new value.  so here we are
 | ||||||
|         // explicitly making sure it is in sync.  this issue was
 |     //     // explicitly making sure it is in sync.  this issue was
 | ||||||
|         // discovered on the "new vendor catalog batch" page
 |     //     // discovered on the "new vendor catalog batch" page
 | ||||||
|         value(val) { |     //     value(val) {
 | ||||||
|             this.$nextTick(() => { |     //         this.$nextTick(() => {
 | ||||||
|                 if (this.buefyValue != val) { |     //             if (this.buefyValue != val) {
 | ||||||
|                     this.buefyValue = val |     //                 this.buefyValue = val
 | ||||||
|                 } |     //             }
 | ||||||
|             }) |     //         })
 | ||||||
|         }, |     //     },
 | ||||||
|     }, |     // },
 | ||||||
| 
 | 
 | ||||||
|     methods: { |     methods: { | ||||||
| 
 | 
 | ||||||
|  | @ -163,9 +163,18 @@ const TailboneAutocomplete = { | ||||||
|             this.buefyValue = null |             this.buefyValue = null | ||||||
| 
 | 
 | ||||||
|             // here is where we alert callers to the new value
 |             // here is where we alert callers to the new value
 | ||||||
|  |             if (option) { | ||||||
|  |                 this.$emit('new-label', option.label) | ||||||
|  |             } | ||||||
|             this.$emit('input', option ? option.value : null) |             this.$emit('input', option ? option.value : null) | ||||||
|         }, |         }, | ||||||
| 
 | 
 | ||||||
|  |         // set selection to the given option, which should a simple
 | ||||||
|  |         // object with (at least) `value` and `label` properties
 | ||||||
|  |         setSelection(option) { | ||||||
|  |             this.$refs.autocomplete.setSelected(option) | ||||||
|  |         }, | ||||||
|  | 
 | ||||||
|         // clear the field of any value, i.e. set the "currently
 |         // clear the field of any value, i.e. set the "currently
 | ||||||
|         // selected option" to null.  this is invoked when you click
 |         // selected option" to null.  this is invoked when you click
 | ||||||
|         // the button, which is visible while the field has a value.
 |         // the button, which is visible while the field has a value.
 | ||||||
|  |  | ||||||
|  | @ -61,17 +61,33 @@ | ||||||
|     ${form.component_studly}Data.parsers = ${json.dumps(parsers_data)|n} |     ${form.component_studly}Data.parsers = ${json.dumps(parsers_data)|n} | ||||||
| 
 | 
 | ||||||
|     ${form.component_studly}Data.vendorName = null |     ${form.component_studly}Data.vendorName = null | ||||||
|  |     ${form.component_studly}Data.vendorNameReplacement = null | ||||||
| 
 | 
 | ||||||
|     ${form.component_studly}.watch.field_model_parser_key = function(val) { |     ${form.component_studly}.watch.field_model_parser_key = function(val) { | ||||||
|         let parser = this.parsers[val] |         let parser = this.parsers[val] | ||||||
|         if (parser.vendor_uuid) { |         if (parser.vendor_uuid) { | ||||||
|             if (this.field_model_vendor_uuid != parser.vendor_uuid) { |             if (this.field_model_vendor_uuid != parser.vendor_uuid) { | ||||||
|                 this.field_model_vendor_uuid = parser.vendor_uuid |                 // this.field_model_vendor_uuid = parser.vendor_uuid | ||||||
|                 this.vendorName = parser.vendor_name |                 // this.vendorName = parser.vendor_name | ||||||
|  |                 this.$refs.vendorAutocomplete.setSelection({ | ||||||
|  |                     value: parser.vendor_uuid, | ||||||
|  |                     label: parser.vendor_name, | ||||||
|  |                 }) | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     ${form.component_studly}.methods.vendorLabelChanging = function(label) { | ||||||
|  |         this.vendorNameReplacement = label | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     ${form.component_studly}.methods.vendorChanged = function(uuid) { | ||||||
|  |         if (uuid) { | ||||||
|  |             this.vendorName = this.vendorNameReplacement | ||||||
|  |             this.vendorNameReplacement = null | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|   </script> |   </script> | ||||||
| </%def> | </%def> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -108,10 +108,13 @@ | ||||||
|        tal:define="vmodel vmodel|'field_model_' + name;" |        tal:define="vmodel vmodel|'field_model_' + name;" | ||||||
|        tal:omit-tag=""> |        tal:omit-tag=""> | ||||||
|     <tailbone-autocomplete name="${name}" |     <tailbone-autocomplete name="${name}" | ||||||
|  |                            ref="${ref}" | ||||||
|                            service-url="${url}" |                            service-url="${url}" | ||||||
|                            v-model="${vmodel}" |                            v-model="${vmodel}" | ||||||
|                            initial-label="${field_display}" |                            initial-label="${field_display}" | ||||||
|                            tal:attributes=":assigned-label assigned_label or 'null';"> |                            tal:attributes=":assigned-label assigned_label or 'null'; | ||||||
|  |                                            @input input_callback or 'null'; | ||||||
|  |                                            @new-label new_label_callback or 'null';"> | ||||||
|     </tailbone-autocomplete> |     </tailbone-autocomplete> | ||||||
|   </div> |   </div> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -203,9 +203,14 @@ class VendorCatalogView(FileBatchMasterView): | ||||||
|                         if vendor: |                         if vendor: | ||||||
|                             vendor_display = six.text_type(vendor) |                             vendor_display = six.text_type(vendor) | ||||||
|                 vendors_url = self.request.route_url('vendors.autocomplete') |                 vendors_url = self.request.route_url('vendors.autocomplete') | ||||||
|                 f.set_widget('vendor_uuid', forms.widgets.JQueryAutocompleteWidget( |                 f.set_widget('vendor_uuid', | ||||||
|                     field_display=vendor_display, service_url=vendors_url, |                              forms.widgets.JQueryAutocompleteWidget( | ||||||
|                     assigned_label='vendorName')) |                                  field_display=vendor_display, | ||||||
|  |                                  service_url=vendors_url, | ||||||
|  |                                  ref='vendorAutocomplete', | ||||||
|  |                                  assigned_label='vendorName', | ||||||
|  |                                  input_callback='vendorChanged', | ||||||
|  |                                  new_label_callback='vendorLabelChanging')) | ||||||
|         else: |         else: | ||||||
|             f.set_readonly('vendor') |             f.set_readonly('vendor') | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lance Edgar
						Lance Edgar