Use product lookup component for "resolve pending product" tool
This commit is contained in:
		
							parent
							
								
									4809cf039e
								
							
						
					
					
						commit
						a5c1cba81b
					
				
					 3 changed files with 45 additions and 20 deletions
				
			
		| 
						 | 
				
			
			@ -532,8 +532,9 @@
 | 
			
		|||
                            Product
 | 
			
		||||
                          </p>
 | 
			
		||||
                          <tailbone-product-lookup ref="productLookup"
 | 
			
		||||
                                                   :selected-product="selectedProduct"
 | 
			
		||||
                                                   @selected="productLookupSelected">
 | 
			
		||||
                                                   :product="selectedProduct"
 | 
			
		||||
                                                   @selected="productLookupSelected"
 | 
			
		||||
                                                   autocomplete-url="${url(f'{route_prefix}.product_autocomplete')}">
 | 
			
		||||
                          </tailbone-product-lookup>
 | 
			
		||||
                        </b-field>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,9 +6,9 @@
 | 
			
		|||
 | 
			
		||||
      <b-field grouped>
 | 
			
		||||
 | 
			
		||||
        <b-field :expanded="!selectedProduct">
 | 
			
		||||
        <b-field :expanded="!product">
 | 
			
		||||
          <b-autocomplete ref="productAutocomplete"
 | 
			
		||||
                          v-if="!selectedProduct"
 | 
			
		||||
                          v-if="!product"
 | 
			
		||||
                          v-model="autocompleteValue"
 | 
			
		||||
                          placeholder="Enter UPC or brand, description etc."
 | 
			
		||||
                          :data="autocompleteOptions"
 | 
			
		||||
| 
						 | 
				
			
			@ -18,25 +18,25 @@
 | 
			
		|||
                          @select="autocompleteSelected"
 | 
			
		||||
                          style="width: 100%;">
 | 
			
		||||
          </b-autocomplete>
 | 
			
		||||
          <b-button v-if="selectedProduct"
 | 
			
		||||
          <b-button v-if="product"
 | 
			
		||||
                    @click="clearSelection(true)">
 | 
			
		||||
            {{ selectedProduct.full_description }}
 | 
			
		||||
            {{ product.full_description }}
 | 
			
		||||
          </b-button>
 | 
			
		||||
        </b-field>
 | 
			
		||||
 | 
			
		||||
        <b-button type="is-primary"
 | 
			
		||||
                  v-if="!selectedProduct"
 | 
			
		||||
                  v-if="!product"
 | 
			
		||||
                  @click="lookupInit()"
 | 
			
		||||
                  icon-pack="fas"
 | 
			
		||||
                  icon-left="search">
 | 
			
		||||
          Full Lookup
 | 
			
		||||
        </b-button>
 | 
			
		||||
 | 
			
		||||
        <b-button v-if="selectedProduct"
 | 
			
		||||
        <b-button v-if="product"
 | 
			
		||||
                  type="is-primary"
 | 
			
		||||
                  tag="a" target="_blank"
 | 
			
		||||
                  :href="selectedProduct.url"
 | 
			
		||||
                  :disabled="!selectedProduct.url"
 | 
			
		||||
                  :href="product.url"
 | 
			
		||||
                  :disabled="!product.url"
 | 
			
		||||
                  icon-pack="fas"
 | 
			
		||||
                  icon-left="external-link-alt">
 | 
			
		||||
          View Product
 | 
			
		||||
| 
						 | 
				
			
			@ -209,9 +209,13 @@
 | 
			
		|||
    const TailboneProductLookup = {
 | 
			
		||||
        template: '#tailbone-product-lookup-template',
 | 
			
		||||
        props: {
 | 
			
		||||
            selectedProduct: {
 | 
			
		||||
            product: {
 | 
			
		||||
                type: Object,
 | 
			
		||||
            },
 | 
			
		||||
            autocompleteUrl: {
 | 
			
		||||
                type: String,
 | 
			
		||||
                default: '${url('products.autocomplete')}',
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
        data() {
 | 
			
		||||
            return {
 | 
			
		||||
| 
						 | 
				
			
			@ -238,7 +242,7 @@
 | 
			
		|||
        methods: {
 | 
			
		||||
 | 
			
		||||
            focus() {
 | 
			
		||||
                if (!this.selectedProduct) {
 | 
			
		||||
                if (!this.product) {
 | 
			
		||||
                    this.$refs.productAutocomplete.focus()
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
| 
						 | 
				
			
			@ -269,8 +273,7 @@
 | 
			
		|||
                }
 | 
			
		||||
 | 
			
		||||
                // and perform the search
 | 
			
		||||
                let url = '${url(f'{route_prefix}.product_autocomplete')}'
 | 
			
		||||
                this.$http.get(url + '?term=' + encodeURIComponent(entry))
 | 
			
		||||
                this.$http.get(this.autocompleteUrl + '?term=' + encodeURIComponent(entry))
 | 
			
		||||
                    .then(({ data }) => {
 | 
			
		||||
                        this.autocompleteOptions = data
 | 
			
		||||
                    }).catch((error) => {
 | 
			
		||||
| 
						 | 
				
			
			@ -283,6 +286,8 @@
 | 
			
		|||
                this.$emit('selected', {
 | 
			
		||||
                    uuid: option.value,
 | 
			
		||||
                    full_description: option.label,
 | 
			
		||||
                    url: option.url,
 | 
			
		||||
                    image_url: option.image_url,
 | 
			
		||||
                })
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,11 @@
 | 
			
		|||
## -*- coding: utf-8; -*-
 | 
			
		||||
<%inherit file="/master/view.mako" />
 | 
			
		||||
<%namespace name="product_lookup" file="/products/lookup.mako" />
 | 
			
		||||
 | 
			
		||||
<%def name="render_this_page_template()">
 | 
			
		||||
  ${parent.render_this_page_template()}
 | 
			
		||||
  ${product_lookup.tailbone_product_lookup_template()}
 | 
			
		||||
</%def>
 | 
			
		||||
 | 
			
		||||
<%def name="object_helpers()">
 | 
			
		||||
  ${parent.object_helpers()}
 | 
			
		||||
| 
						 | 
				
			
			@ -43,12 +49,13 @@
 | 
			
		|||
              <span>${instance.full_description}</span>
 | 
			
		||||
            </b-field>
 | 
			
		||||
            <b-field label="Actual Product" expanded>
 | 
			
		||||
              <tailbone-autocomplete name="product_uuid"
 | 
			
		||||
                                     v-model="resolveProductUUID"
 | 
			
		||||
                                     ref="resolveProductAutocomplete"
 | 
			
		||||
                                     service-url="${url('products.autocomplete')}">
 | 
			
		||||
              </tailbone-autocomplete>
 | 
			
		||||
              <tailbone-product-lookup ref="productLookup"
 | 
			
		||||
                                       autocomplete-url="${url('products.autocomplete_special', key='with_key')}"
 | 
			
		||||
                                       :product="actualProduct"
 | 
			
		||||
                                       @selected="productSelected">
 | 
			
		||||
              </tailbone-product-lookup>
 | 
			
		||||
            </b-field>
 | 
			
		||||
            ${h.hidden('product_uuid', **{':value': 'resolveProductUUID'})}
 | 
			
		||||
          </section>
 | 
			
		||||
 | 
			
		||||
          <footer class="modal-card-foot">
 | 
			
		||||
| 
						 | 
				
			
			@ -91,7 +98,7 @@
 | 
			
		|||
        this.resolveProductUUID = null
 | 
			
		||||
        this.resolveProductShowDialog = true
 | 
			
		||||
        this.$nextTick(() => {
 | 
			
		||||
            this.$refs.resolveProductAutocomplete.focus()
 | 
			
		||||
            this.$refs.productLookup.focus()
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -100,8 +107,20 @@
 | 
			
		|||
        this.$refs.resolveProductForm.submit()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ThisPageData.actualProduct = null
 | 
			
		||||
 | 
			
		||||
    ThisPage.methods.productSelected = function(product) {
 | 
			
		||||
       this.actualProduct = product
 | 
			
		||||
       this.resolveProductUUID = product ? product.uuid : null
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  </script>
 | 
			
		||||
</%def>
 | 
			
		||||
 | 
			
		||||
<%def name="make_this_page_component()">
 | 
			
		||||
  ${parent.make_this_page_component()}
 | 
			
		||||
  ${product_lookup.tailbone_product_lookup_component()}
 | 
			
		||||
</%def>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
${parent.body()}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue