added ability to open ingredient editor from food/unit list

This commit is contained in:
vabene1111 2022-04-17 22:43:33 +02:00
parent d50fb69ce9
commit f0d59a8c9c
7 changed files with 53 additions and 5 deletions

View File

@ -30,6 +30,8 @@
{% endif %}
<script type="application/javascript">
window.DEFAULT_FOOD = {{ food_id }}
window.DEFAULT_UNIT = {{ unit_id }}
window.CUSTOM_LOCALE = '{{ request.LANGUAGE_CODE }}'
</script>

View File

@ -228,7 +228,15 @@ def supermarket(request):
@group_required('user')
def ingredient_editor(request):
return render(request, 'ingredient_editor.html', {})
template_vars = {'food_id': -1, 'unit_id': -1}
food_id = request.GET.get('food_id', None)
if food_id and re.match(r'^(\d)+$', food_id):
template_vars['food_id'] = food_id
unit_id = request.GET.get('unit_id', None)
if unit_id and re.match(r'^(\d)+$', unit_id):
template_vars['unit_id'] = unit_id
return render(request, 'ingredient_editor.html', template_vars)
@group_required('user')

View File

@ -88,7 +88,9 @@
</td>
<td style="width: 5vw">
<b-button :disabled="i.changed !== true" :variant="(i.changed !== true) ? 'primary' : 'success'" @click="updateIngredient(i)">
<b-button :disabled="i.changed !== true"
:variant="(i.changed !== true) ? 'primary' : 'success'"
@click="updateIngredient(i)">
<i class="fas fa-save"></i>
</b-button>
</td>
@ -137,6 +139,20 @@ export default {
computed: {},
mounted() {
this.$i18n.locale = window.CUSTOM_LOCALE
if (window.DEFAULT_FOOD !== -1) {
this.food = {id: window.DEFAULT_FOOD}
let apiClient = new ApiApiFactory()
apiClient.retrieveFood(this.food.id).then(r => {
this.food = r.data
})
}
if (window.DEFAULT_UNIT !== -1) {
this.unit = {id: window.DEFAULT_UNIT}
let apiClient = new ApiApiFactory()
apiClient.retrieveUnit(this.unit.id).then(r => {
this.unit = r.data
})
}
this.refreshList()
},
methods: {

View File

@ -80,7 +80,7 @@ import {BootstrapVue} from "bootstrap-vue"
import "bootstrap-vue/dist/bootstrap-vue.css"
import {CardMixin, ApiMixin, getConfig} from "@/utils/utils"
import {CardMixin, ApiMixin, getConfig, resolveDjangoUrl} from "@/utils/utils"
import {StandardToasts, ToastMixin} from "@/utils/utils"
import GenericInfiniteCards from "@/components/GenericInfiniteCards"
@ -158,7 +158,6 @@ export default {
let target = e?.target ?? undefined
this.this_item = source
this.this_target = target
switch (e.action) {
case "delete":
this.this_action = this.Actions.DELETE
@ -173,6 +172,16 @@ export default {
this.this_action = this.Actions.UPDATE
this.show_modal = true
break
case "ingredient-editor": {
let url = resolveDjangoUrl("view_ingredient_editor")
if (this.this_model === this.Models.FOOD) {
window.location.href = url + '?food_id=' + e.source.id
}
if (this.this_model === this.Models.UNIT) {
window.location.href = url + '?unit_id=' + e.source.id
}
break
}
case "move":
if (target == null) {
this.this_item = e.source

View File

@ -6,7 +6,10 @@
</template>
<b-dropdown-item v-on:click="$emit('item-action', 'edit')" v-if="show_edit"> <i class="fas fa-pencil-alt fa-fw"></i> {{ $t("Edit") }} </b-dropdown-item>
<b-dropdown-item v-on:click="$emit('item-action', 'delete')" v-if="show_delete"> <i class="fas fa-trash-alt fa-fw"></i> {{ $t("Delete") }} </b-dropdown-item>
<b-dropdown-item v-on:click="$emit('item-action', 'ingredient-editor')" v-if="show_ingredient_editor"> <i class="fas fa-th-list fa-dw"></i> {{ $t("Ingredient Editor") }} </b-dropdown-item>
<b-dropdown-item v-on:click="$emit('item-action', 'add-shopping')" v-if="show_shopping">
<i class="fas fa-cart-plus fa-fw"></i> {{ $t("Add_to_Shopping") }}
</b-dropdown-item>
@ -24,8 +27,11 @@
</template>
<script>
import {ResolveUrlMixin} from "@/utils/utils";
export default {
name: "GenericContextMenu",
mixins: [ResolveUrlMixin],
props: {
show_edit: { type: Boolean, default: true },
show_delete: { type: Boolean, default: true },
@ -33,6 +39,7 @@ export default {
show_merge: { type: Boolean, default: false },
show_shopping: { type: Boolean, default: false },
show_onhand: { type: Boolean, default: false },
show_ingredient_editor: { type: Boolean, default: false },
},
}
</script>

View File

@ -61,6 +61,7 @@
:show_move="useMove"
:show_shopping="useShopping"
:show_onhand="useOnhand"
:show_ingredient_editor="useIngredientEditor"
@item-action="$emit('item-action', { action: $event, source: item })"
>
</generic-context-menu>
@ -132,11 +133,12 @@ import GenericOrderedPill from "@/components/GenericOrderedPill"
import RecipeCard from "@/components/RecipeCard"
import { mixin as clickaway } from "vue-clickaway"
import { createPopper } from "@popperjs/core"
import {ApiMixin} from "@/utils/utils";
export default {
name: "GenericHorizontalCard",
components: { GenericContextMenu, RecipeCard, Badges, GenericPill, GenericOrderedPill },
mixins: [clickaway],
mixins: [clickaway, ApiMixin],
props: {
item: { type: Object },
model: { type: Object },
@ -186,6 +188,9 @@ export default {
useDrag: function () {
return this.useMove || this.useMerge
},
useIngredientEditor: function (){
return (this.model === this.Models.FOOD || this.model === this.Models.UNIT)
},
itemTags: function () {
return this.model?.tags ?? []
},

View File

@ -64,6 +64,7 @@
"Make_Ingredient": "Make Ingredient",
"Enable_Amount": "Enable Amount",
"Disable_Amount": "Disable Amount",
"Ingredient Editor": "Ingredient Editor",
"Add_Step": "Add Step",
"Keywords": "Keywords",
"Books": "Books",