mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2025-12-23 18:29:23 -05:00
WIP
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import traceback
|
||||
import uuid
|
||||
from datetime import datetime, timedelta
|
||||
from decimal import Decimal
|
||||
@@ -188,7 +189,11 @@ class SpaceFilterSerializer(serializers.ListSerializer):
|
||||
else:
|
||||
iterable = data.all() if hasattr(data, 'all') else data
|
||||
if isinstance(iterable, list) or (isinstance(iterable, QuerySet) and getattr(iterable, '_result_cache', None) is not None):
|
||||
data = [d for d in iterable if d.userspace.space.id == self.context['request'].space.id]
|
||||
try:
|
||||
data = [d for d in iterable if d.userspace.space.id == self.context['request'].space.id]
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
data = data.filter(userspace__space=self.context['request'].user.get_active_space()).all()
|
||||
else:
|
||||
if hasattr(self.context['request'], 'space'):
|
||||
data = data.filter(userspace__space=self.context['request'].space).all()
|
||||
|
||||
@@ -2055,6 +2055,9 @@ class ShoppingListEntryViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
'list_recipe__recipe__created_by',
|
||||
'list_recipe__mealplan',
|
||||
'list_recipe__mealplan__shared',
|
||||
|
||||
'list_recipe__mealplan__shared__userpreference',
|
||||
'list_recipe__mealplan__shared__userpreference__space',
|
||||
'list_recipe__mealplan__shoppinglistrecipe_set',
|
||||
'list_recipe__mealplan__recipe',
|
||||
'list_recipe__mealplan__recipe__keywords',
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<template>
|
||||
<v-list-item class="swipe-container border-t-sm mt-0 mb-0 pt-0 pb-0 pe-0 pa-0 shopping-border" :id="itemContainerId" @touchend="handleSwipe()" @click="dialog = true;"
|
||||
|
||||
<v-list-item class="swipe-container border-t-sm mt-0 mb-0 pt-0 pb-0 pe-0 pa-0 shopping-border"
|
||||
:id="itemContainerId"
|
||||
@touchend="handleSwipe()"
|
||||
@click="dialog = true;"
|
||||
:value="shoppingListFood"
|
||||
>
|
||||
<!-- <div class="swipe-action" :class="{'bg-success': !isChecked , 'bg-warning': isChecked }">-->
|
||||
<!-- <i class="swipe-icon fa-fw fas" :class="{'fa-check': !isChecked , 'fa-cart-plus': isChecked }"></i>-->
|
||||
@@ -34,13 +37,18 @@
|
||||
</div>
|
||||
|
||||
|
||||
<template v-slot:[selectBtnSlot]="{ isSelected, select }">
|
||||
<v-list-item-action class="ps-3 pe-3" start>
|
||||
<v-checkbox-btn :model-value="isSelected" @update:model-value="select" @click.native.stop=""></v-checkbox-btn>
|
||||
</v-list-item-action>
|
||||
</template>
|
||||
|
||||
<template v-slot:[checkBtnSlot]>
|
||||
<div class="ps-3 pe-3" @click.native.stop="useShoppingStore().setEntriesCheckedState(entries, !isChecked, true);">
|
||||
<v-btn color="success" size="large"
|
||||
:class="{'btn-success': !isChecked, 'btn-warning': isChecked}" :icon="actionButtonIcon" variant="plain">
|
||||
</v-btn>
|
||||
</div>
|
||||
<!-- <i class="d-print-none fa-fw fas" :class="{'fa-check': !isChecked , 'fa-cart-plus': isChecked }"></i>-->
|
||||
</template>
|
||||
|
||||
<!-- <div class="swipe-action bg-primary justify-content-end">-->
|
||||
@@ -74,7 +82,9 @@ const props = defineProps({
|
||||
hideInfoRow: {type: Boolean, default: false}
|
||||
})
|
||||
const checkBtnSlot = ref(useUserPreferenceStore().userSettings.leftHanded ? 'prepend' : 'append')
|
||||
const selectBtnSlot = ref(useUserPreferenceStore().userSettings.leftHanded ? 'append' : 'prepend')
|
||||
|
||||
const selectEnabled = ref(true)
|
||||
const dialog = ref(false)
|
||||
|
||||
const entries = computed(() => {
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
<v-skeleton-loader type="list-item"></v-skeleton-loader>
|
||||
<v-skeleton-loader type="list-item"></v-skeleton-loader>
|
||||
</v-list>
|
||||
<v-list class="mt-3" density="compact" v-else>
|
||||
<v-list class="mt-3" density="compact" v-model:selected="selectedLines" select-strategy="leaf" v-else>
|
||||
<template v-for="category in useShoppingStore().entriesByGroup" :key="category.name">
|
||||
|
||||
|
||||
@@ -312,14 +312,14 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
|
||||
import {computed, onMounted, ref, toRef, watch} from "vue";
|
||||
import {computed, onMounted, ref, shallowRef, toRef, watch} from "vue";
|
||||
import {useShoppingStore} from "@/stores/ShoppingStore";
|
||||
import {ApiApi, Recipe, ResponseError, ShoppingList, ShoppingListEntry, ShoppingListRecipe, Supermarket} from "@/openapi";
|
||||
import {ErrorMessageType, PreparedMessage, useMessageStore} from "@/stores/MessageStore";
|
||||
import ShoppingLineItem from "@/components/display/ShoppingLineItem.vue";
|
||||
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
|
||||
import ModelSelect from "@/components/inputs/ModelSelect.vue";
|
||||
import {ShoppingGroupingOptions} from "@/types/Shopping";
|
||||
import {IShoppingListFood, ShoppingGroupingOptions} from "@/types/Shopping";
|
||||
import {useI18n} from "vue-i18n";
|
||||
import NumberScalerDialog from "@/components/inputs/NumberScalerDialog.vue";
|
||||
import SupermarketEditor from "@/components/model_editors/SupermarketEditor.vue";
|
||||
@@ -341,6 +341,8 @@ const supermarkets = ref([] as Supermarket[])
|
||||
const shoppingLists = ref([] as ShoppingList[])
|
||||
const manualAddRecipe = ref<undefined | Recipe>(undefined)
|
||||
|
||||
const selectedLines = shallowRef([] as IShoppingListFood[])
|
||||
|
||||
/**
|
||||
* VSelect items for shopping list grouping options with localized names
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user