Use product lookup component for "resolve pending product" tool

This commit is contained in:
Lance Edgar 2023-10-26 10:06:00 -05:00
parent 4809cf039e
commit a5c1cba81b
3 changed files with 45 additions and 20 deletions

View file

@ -532,8 +532,9 @@
Product Product
</p> </p>
<tailbone-product-lookup ref="productLookup" <tailbone-product-lookup ref="productLookup"
:selected-product="selectedProduct" :product="selectedProduct"
@selected="productLookupSelected"> @selected="productLookupSelected"
autocomplete-url="${url(f'{route_prefix}.product_autocomplete')}">
</tailbone-product-lookup> </tailbone-product-lookup>
</b-field> </b-field>

View file

@ -6,9 +6,9 @@
<b-field grouped> <b-field grouped>
<b-field :expanded="!selectedProduct"> <b-field :expanded="!product">
<b-autocomplete ref="productAutocomplete" <b-autocomplete ref="productAutocomplete"
v-if="!selectedProduct" v-if="!product"
v-model="autocompleteValue" v-model="autocompleteValue"
placeholder="Enter UPC or brand, description etc." placeholder="Enter UPC or brand, description etc."
:data="autocompleteOptions" :data="autocompleteOptions"
@ -18,25 +18,25 @@
@select="autocompleteSelected" @select="autocompleteSelected"
style="width: 100%;"> style="width: 100%;">
</b-autocomplete> </b-autocomplete>
<b-button v-if="selectedProduct" <b-button v-if="product"
@click="clearSelection(true)"> @click="clearSelection(true)">
{{ selectedProduct.full_description }} {{ product.full_description }}
</b-button> </b-button>
</b-field> </b-field>
<b-button type="is-primary" <b-button type="is-primary"
v-if="!selectedProduct" v-if="!product"
@click="lookupInit()" @click="lookupInit()"
icon-pack="fas" icon-pack="fas"
icon-left="search"> icon-left="search">
Full Lookup Full Lookup
</b-button> </b-button>
<b-button v-if="selectedProduct" <b-button v-if="product"
type="is-primary" type="is-primary"
tag="a" target="_blank" tag="a" target="_blank"
:href="selectedProduct.url" :href="product.url"
:disabled="!selectedProduct.url" :disabled="!product.url"
icon-pack="fas" icon-pack="fas"
icon-left="external-link-alt"> icon-left="external-link-alt">
View Product View Product
@ -209,9 +209,13 @@
const TailboneProductLookup = { const TailboneProductLookup = {
template: '#tailbone-product-lookup-template', template: '#tailbone-product-lookup-template',
props: { props: {
selectedProduct: { product: {
type: Object, type: Object,
}, },
autocompleteUrl: {
type: String,
default: '${url('products.autocomplete')}',
},
}, },
data() { data() {
return { return {
@ -238,7 +242,7 @@
methods: { methods: {
focus() { focus() {
if (!this.selectedProduct) { if (!this.product) {
this.$refs.productAutocomplete.focus() this.$refs.productAutocomplete.focus()
} }
}, },
@ -269,8 +273,7 @@
} }
// and perform the search // and perform the search
let url = '${url(f'{route_prefix}.product_autocomplete')}' this.$http.get(this.autocompleteUrl + '?term=' + encodeURIComponent(entry))
this.$http.get(url + '?term=' + encodeURIComponent(entry))
.then(({ data }) => { .then(({ data }) => {
this.autocompleteOptions = data this.autocompleteOptions = data
}).catch((error) => { }).catch((error) => {
@ -283,6 +286,8 @@
this.$emit('selected', { this.$emit('selected', {
uuid: option.value, uuid: option.value,
full_description: option.label, full_description: option.label,
url: option.url,
image_url: option.image_url,
}) })
}, },

View file

@ -1,5 +1,11 @@
## -*- coding: utf-8; -*- ## -*- coding: utf-8; -*-
<%inherit file="/master/view.mako" /> <%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()"> <%def name="object_helpers()">
${parent.object_helpers()} ${parent.object_helpers()}
@ -43,12 +49,13 @@
<span>${instance.full_description}</span> <span>${instance.full_description}</span>
</b-field> </b-field>
<b-field label="Actual Product" expanded> <b-field label="Actual Product" expanded>
<tailbone-autocomplete name="product_uuid" <tailbone-product-lookup ref="productLookup"
v-model="resolveProductUUID" autocomplete-url="${url('products.autocomplete_special', key='with_key')}"
ref="resolveProductAutocomplete" :product="actualProduct"
service-url="${url('products.autocomplete')}"> @selected="productSelected">
</tailbone-autocomplete> </tailbone-product-lookup>
</b-field> </b-field>
${h.hidden('product_uuid', **{':value': 'resolveProductUUID'})}
</section> </section>
<footer class="modal-card-foot"> <footer class="modal-card-foot">
@ -91,7 +98,7 @@
this.resolveProductUUID = null this.resolveProductUUID = null
this.resolveProductShowDialog = true this.resolveProductShowDialog = true
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.resolveProductAutocomplete.focus() this.$refs.productLookup.focus()
}) })
} }
@ -100,8 +107,20 @@
this.$refs.resolveProductForm.submit() this.$refs.resolveProductForm.submit()
} }
ThisPageData.actualProduct = null
ThisPage.methods.productSelected = function(product) {
this.actualProduct = product
this.resolveProductUUID = product ? product.uuid : null
}
</script> </script>
</%def> </%def>
<%def name="make_this_page_component()">
${parent.make_this_page_component()}
${product_lookup.tailbone_product_lookup_component()}
</%def>
${parent.body()} ${parent.body()}