mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2026-01-01 04:10:06 -05:00
general layout improvements
This commit is contained in:
@@ -401,6 +401,7 @@ class MealTypeSerializer(SpacedModelSerializer, WritableNestedModelSerializer):
|
|||||||
|
|
||||||
|
|
||||||
class UserPreferenceSerializer(WritableNestedModelSerializer):
|
class UserPreferenceSerializer(WritableNestedModelSerializer):
|
||||||
|
user = UserSerializer(read_only=True)
|
||||||
food_inherit_default = serializers.SerializerMethodField('get_food_inherit_defaults')
|
food_inherit_default = serializers.SerializerMethodField('get_food_inherit_defaults')
|
||||||
plan_share = UserSerializer(many=True, allow_null=True, required=False)
|
plan_share = UserSerializer(many=True, allow_null=True, required=False)
|
||||||
shopping_share = UserSerializer(many=True, allow_null=True, required=False)
|
shopping_share = UserSerializer(many=True, allow_null=True, required=False)
|
||||||
@@ -436,6 +437,7 @@ class UserPreferenceSerializer(WritableNestedModelSerializer):
|
|||||||
'filter_to_supermarket', 'shopping_add_onhand', 'left_handed', 'show_step_ingredients',
|
'filter_to_supermarket', 'shopping_add_onhand', 'left_handed', 'show_step_ingredients',
|
||||||
'food_children_exist'
|
'food_children_exist'
|
||||||
)
|
)
|
||||||
|
read_only_fields = ('user',)
|
||||||
|
|
||||||
|
|
||||||
class StorageSerializer(SpacedModelSerializer):
|
class StorageSerializer(SpacedModelSerializer):
|
||||||
@@ -1438,6 +1440,7 @@ class ServerSettingsSerializer(serializers.Serializer):
|
|||||||
imprint_url = serializers.CharField()
|
imprint_url = serializers.CharField()
|
||||||
hosted = serializers.BooleanField()
|
hosted = serializers.BooleanField()
|
||||||
debug = serializers.BooleanField()
|
debug = serializers.BooleanField()
|
||||||
|
version = serializers.CharField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
fields = '__ALL__'
|
fields = '__ALL__'
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ from cookbook.serializer import (AccessTokenSerializer, AutomationSerializer, Au
|
|||||||
UserSerializer, UserSpaceSerializer, ViewLogSerializer, ImportImageSerializer,
|
UserSerializer, UserSpaceSerializer, ViewLogSerializer, ImportImageSerializer,
|
||||||
LocalizationSerializer, ServerSettingsSerializer
|
LocalizationSerializer, ServerSettingsSerializer
|
||||||
)
|
)
|
||||||
|
from cookbook.version_info import TANDOOR_VERSION
|
||||||
from cookbook.views.import_export import get_integration
|
from cookbook.views.import_export import get_integration
|
||||||
from recipes import settings
|
from recipes import settings
|
||||||
from recipes.settings import DRF_THROTTLE_RECIPE_URL_IMPORT, FDC_API_KEY, GOOGLE_AI_API_KEY
|
from recipes.settings import DRF_THROTTLE_RECIPE_URL_IMPORT, FDC_API_KEY, GOOGLE_AI_API_KEY
|
||||||
@@ -1964,6 +1965,7 @@ class ServerSettingsViewSet(viewsets.GenericViewSet):
|
|||||||
s['imprint_url'] = settings.IMPRINT_URL
|
s['imprint_url'] = settings.IMPRINT_URL
|
||||||
s['hosted'] = settings.HOSTED
|
s['hosted'] = settings.HOSTED
|
||||||
s['debug'] = settings.DEBUG
|
s['debug'] = settings.DEBUG
|
||||||
|
s['version'] = TANDOOR_VERSION
|
||||||
|
|
||||||
return Response(ServerSettingsSerializer(s, many=False).data)
|
return Response(ServerSettingsSerializer(s, many=False).data)
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/luxon": "^3.4.2",
|
"@types/luxon": "^3.4.2",
|
||||||
"@vueform/multiselect": "^2.6.8",
|
"@vueform/multiselect": "^2.6.11",
|
||||||
"@vueuse/core": "^10.11.0",
|
"@vueuse/core": "^10.11.0",
|
||||||
"luxon": "^3.4.4",
|
"luxon": "^3.4.4",
|
||||||
"mavon-editor": "^3.0.1",
|
"mavon-editor": "^3.0.1",
|
||||||
|
|||||||
@@ -7,35 +7,59 @@
|
|||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<global-search-dialog></global-search-dialog>
|
<global-search-dialog></global-search-dialog>
|
||||||
|
|
||||||
<v-avatar color="cyan" class="me-2">V
|
<v-avatar color="primary" class="me-2">{{useUserPreferenceStore().userSettings.user.displayName.charAt(0)}}
|
||||||
<v-menu activator="parent">
|
<v-menu activator="parent">
|
||||||
|
|
||||||
<v-list density="compact">
|
<v-list density="compact">
|
||||||
<v-list-item class="pb-2">
|
<v-list-item class="mb-1">
|
||||||
<v-card>
|
<template #prepend>
|
||||||
<v-avatar color="cyan" class="me-2">V</v-avatar> vabene1111
|
<v-avatar color="primary">{{ useUserPreferenceStore().userSettings.user.displayName.charAt(0) }}</v-avatar>
|
||||||
</v-card>
|
</template>
|
||||||
|
<v-list-item-title>{{ useUserPreferenceStore().userSettings.user.displayName }}</v-list-item-title>
|
||||||
|
<v-list-item-subtitle>{{ useUserPreferenceStore().activeSpace.name }}</v-list-item-subtitle>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-divider></v-divider>
|
<v-divider></v-divider>
|
||||||
<v-list-item :to="{ name: 'view_settings', params: {} }"><template #prepend><v-icon icon="fa-solid fa-sliders"></v-icon></template>{{$t('Settings')}}</v-list-item>
|
<v-list-item :to="{ name: 'view_settings', params: {} }">
|
||||||
<v-list-item :to="{ name: 'ModelListPage', params: {model: 'food'} }"><template #prepend><v-icon icon="fa-solid fa-folder-tree"></v-icon></template>{{$t('Database')}}</v-list-item>
|
<template #prepend>
|
||||||
<!-- <v-list-item><template #prepend><v-icon icon="fa-solid fa-user-shield"></v-icon></template>Admin</v-list-item>-->
|
<v-icon icon="fa-solid fa-sliders"></v-icon>
|
||||||
<!-- <v-list-item><template #prepend><v-icon icon="fa-solid fa-question"></v-icon></template>Help</v-list-item>-->
|
</template>
|
||||||
|
{{ $t('Settings') }}
|
||||||
|
</v-list-item>
|
||||||
|
<v-list-item :to="{ name: 'ModelListPage', params: {model: 'food'} }">
|
||||||
|
<template #prepend>
|
||||||
|
<v-icon icon="fa-solid fa-folder-tree"></v-icon>
|
||||||
|
</template>
|
||||||
|
{{ $t('Database') }}
|
||||||
|
</v-list-item>
|
||||||
|
<!-- <v-list-item><template #prepend><v-icon icon="fa-solid fa-user-shield"></v-icon></template>Admin</v-list-item>-->
|
||||||
|
<!-- <v-list-item><template #prepend><v-icon icon="fa-solid fa-question"></v-icon></template>Help</v-list-item>-->
|
||||||
<v-divider></v-divider>
|
<v-divider></v-divider>
|
||||||
<v-list-subheader>Spaces</v-list-subheader>
|
<v-list-subheader>Spaces</v-list-subheader>
|
||||||
<v-list-item>Space 1</v-list-item>
|
<v-list-item>Space 1</v-list-item>
|
||||||
<v-list-item>Space 2</v-list-item>
|
<v-list-item>Space 2</v-list-item>
|
||||||
<v-list-item>Space 3</v-list-item>
|
<v-list-item>Space 3</v-list-item>
|
||||||
<v-divider></v-divider>
|
<v-divider></v-divider>
|
||||||
<v-list-item link><template #prepend><v-icon icon="fa-solid fa-database"></v-icon></template>{{$t('Messages')}}<message-list-dialog></message-list-dialog></v-list-item>
|
<v-list-item link>
|
||||||
<v-list-item><template #prepend><v-icon icon="fa-solid fa-arrow-right-from-bracket"></v-icon></template>{{$t('Logout')}}</v-list-item>
|
<template #prepend>
|
||||||
|
<v-icon icon="fa-solid fa-database"></v-icon>
|
||||||
|
</template>
|
||||||
|
{{ $t('Messages') }}
|
||||||
|
<message-list-dialog></message-list-dialog>
|
||||||
|
</v-list-item>
|
||||||
|
<v-list-item>
|
||||||
|
<template #prepend>
|
||||||
|
<v-icon icon="fa-solid fa-arrow-right-from-bracket"></v-icon>
|
||||||
|
</template>
|
||||||
|
{{ $t('Logout') }}
|
||||||
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-menu>
|
</v-menu>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
</v-app-bar>
|
</v-app-bar>
|
||||||
<v-app-bar color="warning" density="compact" v-if="useUserPreferenceStore().activeSpace.maxRecipes == 10 && useUserPreferenceStore().serverSettings.hosted">
|
<v-app-bar color="warning" density="compact" v-if="useUserPreferenceStore().activeSpace.maxRecipes == 10 && useUserPreferenceStore().serverSettings.hosted">
|
||||||
<p class="text-center w-100">
|
<p class="text-center w-100">
|
||||||
{{ $t('HostedFreeVersion')}} <v-btn color="success" variant="flat" href="https://tandoor.dev/manage">{{$t('UpgradeNow')}}</v-btn>
|
{{ $t('HostedFreeVersion') }}
|
||||||
|
<v-btn color="success" variant="flat" href="https://tandoor.dev/manage">{{ $t('UpgradeNow') }}</v-btn>
|
||||||
</p>
|
</p>
|
||||||
</v-app-bar>
|
</v-app-bar>
|
||||||
|
|
||||||
@@ -50,13 +74,24 @@
|
|||||||
</v-main>
|
</v-main>
|
||||||
|
|
||||||
<v-navigation-drawer v-if="lgAndUp">
|
<v-navigation-drawer v-if="lgAndUp">
|
||||||
<v-list-item title="My Application" subtitle="Vuetify"></v-list-item>
|
<v-list-item>
|
||||||
|
<template #prepend>
|
||||||
|
<v-avatar color="primary">{{ useUserPreferenceStore().userSettings.user.displayName.charAt(0) }}</v-avatar>
|
||||||
|
</template>
|
||||||
|
<v-list-item-title>{{ useUserPreferenceStore().userSettings.user.displayName }}</v-list-item-title>
|
||||||
|
<v-list-item-subtitle>{{ useUserPreferenceStore().activeSpace.name }}</v-list-item-subtitle>
|
||||||
|
</v-list-item>
|
||||||
<v-divider></v-divider>
|
<v-divider></v-divider>
|
||||||
<v-list-item prepend-icon="fas fa-book" title="Home" :to="{ name: 'view_home', params: {} }"></v-list-item>
|
<v-list-item prepend-icon="fas fa-book" title="Home" :to="{ name: 'view_home', params: {} }"></v-list-item>
|
||||||
<v-list-item prepend-icon="fas fa-calendar-alt" title="Mealplan" :to="{ name: 'view_mealplan', params: {} }"></v-list-item>
|
<v-list-item prepend-icon="fas fa-calendar-alt" title="Mealplan" :to="{ name: 'view_mealplan', params: {} }"></v-list-item>
|
||||||
<v-list-item prepend-icon="fas fa-shopping-cart" title="Shopping" :to="{ name: 'view_shopping', params: {} }"></v-list-item>
|
<v-list-item prepend-icon="fas fa-shopping-cart" title="Shopping" :to="{ name: 'view_shopping', params: {} }"></v-list-item>
|
||||||
<v-list-item prepend-icon="fas fa-bars" title="More" :to="{ name: 'view_books', params: {} }"></v-list-item>
|
|
||||||
<v-list-item prepend-icon="fas fa-bars" title="Test" :to="{ name: 'view_test', params: {} }"></v-list-item>
|
<v-list-item prepend-icon="fas fa-bars" title="Test" :to="{ name: 'view_test', params: {} }"></v-list-item>
|
||||||
|
<template #append>
|
||||||
|
<v-list-item prepend-icon="fas fa-sliders" :title="$t('Settings')" :to="{ name: 'view_settings', params: {} }"></v-list-item>
|
||||||
|
<v-list-item prepend-icon="fa-solid fa-heart" href="https://tandoor.dev" target="_blank">
|
||||||
|
Tandoor {{ useUserPreferenceStore().serverSettings.version }}
|
||||||
|
</v-list-item>
|
||||||
|
</template>
|
||||||
<!-- TODO link -->
|
<!-- TODO link -->
|
||||||
</v-navigation-drawer>
|
</v-navigation-drawer>
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- TODO label is not showing for some reason, for now in placeholder -->
|
<!-- TODO label is not showing for some reason, for now in placeholder -->
|
||||||
<!-- TODO support density prop -->
|
<!-- TODO support density prop -->
|
||||||
<v-input :hint="props.hint" persistent-hint :label="props.label" class="">
|
<v-input :hint="props.hint" persistent-hint :label="props.label" class="" >
|
||||||
|
|
||||||
<!-- TODO resolve-on-load false for now, race condition with model class, make prop once better solution is found -->
|
<!-- TODO resolve-on-load false for now, race condition with model class, make prop once better solution is found -->
|
||||||
<!-- TODO strange behavior/layering issues with appendTo body, find solution to make it work -->
|
|
||||||
|
|
||||||
<Multiselect
|
<Multiselect
|
||||||
:id="props.id"
|
|
||||||
:ref="`ref_${props.id}`"
|
:ref="`ref_${props.id}`"
|
||||||
class="material-multiselect z-max"
|
class="material-multiselect"
|
||||||
:resolve-on-load="searchOnLoad"
|
:resolve-on-load="searchOnLoad"
|
||||||
v-model="model"
|
v-model="model"
|
||||||
:options="search"
|
:options="search"
|
||||||
@@ -31,6 +30,10 @@
|
|||||||
:noResultsText="$t('No_Results')"
|
:noResultsText="$t('No_Results')"
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
@open="multiselect.refreshOptions()"
|
@open="multiselect.refreshOptions()"
|
||||||
|
append-to-body
|
||||||
|
:classes="{
|
||||||
|
dropdown: 'multiselect-dropdown z-3000',
|
||||||
|
}"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
</v-input>
|
</v-input>
|
||||||
@@ -140,4 +143,8 @@ async function createObject(object: any, select$: Multiselect) {
|
|||||||
.multiselect-tag {
|
.multiselect-tag {
|
||||||
background-color: #b98766 !important;
|
background-color: #b98766 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.z-3000 {
|
||||||
|
z-index: 3000;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1239,11 +1239,8 @@ export interface ApiShoppingListEntryDestroyRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface ApiShoppingListEntryListRequest {
|
export interface ApiShoppingListEntryListRequest {
|
||||||
checked?: string;
|
|
||||||
id?: number;
|
|
||||||
page?: number;
|
page?: number;
|
||||||
pageSize?: number;
|
pageSize?: number;
|
||||||
supermarket?: number;
|
|
||||||
updatedAfter?: Date;
|
updatedAfter?: Date;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1620,7 +1617,7 @@ export interface ApiUserPartialUpdateRequest {
|
|||||||
|
|
||||||
export interface ApiUserPreferencePartialUpdateRequest {
|
export interface ApiUserPreferencePartialUpdateRequest {
|
||||||
user: number;
|
user: number;
|
||||||
patchedUserPreference?: Omit<PatchedUserPreference, 'food_inherit_default'|'food_children_exist'>;
|
patchedUserPreference?: Omit<PatchedUserPreference, 'user'|'food_inherit_default'|'food_children_exist'>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ApiUserPreferenceRetrieveRequest {
|
export interface ApiUserPreferenceRetrieveRequest {
|
||||||
@@ -9096,7 +9093,7 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryBulkCreateRaw(requestParameters: ApiShoppingListEntryBulkCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ShoppingListEntryBulk>> {
|
async apiShoppingListEntryBulkCreateRaw(requestParameters: ApiShoppingListEntryBulkCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ShoppingListEntryBulk>> {
|
||||||
if (requestParameters['shoppingListEntryBulk'] == null) {
|
if (requestParameters['shoppingListEntryBulk'] == null) {
|
||||||
@@ -9128,7 +9125,7 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryBulkCreate(requestParameters: ApiShoppingListEntryBulkCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ShoppingListEntryBulk> {
|
async apiShoppingListEntryBulkCreate(requestParameters: ApiShoppingListEntryBulkCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ShoppingListEntryBulk> {
|
||||||
const response = await this.apiShoppingListEntryBulkCreateRaw(requestParameters, initOverrides);
|
const response = await this.apiShoppingListEntryBulkCreateRaw(requestParameters, initOverrides);
|
||||||
@@ -9136,7 +9133,7 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryCreateRaw(requestParameters: ApiShoppingListEntryCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ShoppingListEntry>> {
|
async apiShoppingListEntryCreateRaw(requestParameters: ApiShoppingListEntryCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ShoppingListEntry>> {
|
||||||
if (requestParameters['shoppingListEntry'] == null) {
|
if (requestParameters['shoppingListEntry'] == null) {
|
||||||
@@ -9168,7 +9165,7 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryCreate(requestParameters: ApiShoppingListEntryCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ShoppingListEntry> {
|
async apiShoppingListEntryCreate(requestParameters: ApiShoppingListEntryCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ShoppingListEntry> {
|
||||||
const response = await this.apiShoppingListEntryCreateRaw(requestParameters, initOverrides);
|
const response = await this.apiShoppingListEntryCreateRaw(requestParameters, initOverrides);
|
||||||
@@ -9176,7 +9173,7 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryDestroyRaw(requestParameters: ApiShoppingListEntryDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
|
async apiShoppingListEntryDestroyRaw(requestParameters: ApiShoppingListEntryDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
|
||||||
if (requestParameters['id'] == null) {
|
if (requestParameters['id'] == null) {
|
||||||
@@ -9205,26 +9202,18 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryDestroy(requestParameters: ApiShoppingListEntryDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
|
async apiShoppingListEntryDestroy(requestParameters: ApiShoppingListEntryDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
|
||||||
await this.apiShoppingListEntryDestroyRaw(requestParameters, initOverrides);
|
await this.apiShoppingListEntryDestroyRaw(requestParameters, initOverrides);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryListRaw(requestParameters: ApiShoppingListEntryListRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<PaginatedShoppingListEntryList>> {
|
async apiShoppingListEntryListRaw(requestParameters: ApiShoppingListEntryListRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<PaginatedShoppingListEntryList>> {
|
||||||
const queryParameters: any = {};
|
const queryParameters: any = {};
|
||||||
|
|
||||||
if (requestParameters['checked'] != null) {
|
|
||||||
queryParameters['checked'] = requestParameters['checked'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requestParameters['id'] != null) {
|
|
||||||
queryParameters['id'] = requestParameters['id'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requestParameters['page'] != null) {
|
if (requestParameters['page'] != null) {
|
||||||
queryParameters['page'] = requestParameters['page'];
|
queryParameters['page'] = requestParameters['page'];
|
||||||
}
|
}
|
||||||
@@ -9233,10 +9222,6 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
queryParameters['page_size'] = requestParameters['pageSize'];
|
queryParameters['page_size'] = requestParameters['pageSize'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (requestParameters['supermarket'] != null) {
|
|
||||||
queryParameters['supermarket'] = requestParameters['supermarket'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requestParameters['updatedAfter'] != null) {
|
if (requestParameters['updatedAfter'] != null) {
|
||||||
queryParameters['updated_after'] = (requestParameters['updatedAfter'] as any).toISOString();
|
queryParameters['updated_after'] = (requestParameters['updatedAfter'] as any).toISOString();
|
||||||
}
|
}
|
||||||
@@ -9258,7 +9243,7 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryList(requestParameters: ApiShoppingListEntryListRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<PaginatedShoppingListEntryList> {
|
async apiShoppingListEntryList(requestParameters: ApiShoppingListEntryListRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<PaginatedShoppingListEntryList> {
|
||||||
const response = await this.apiShoppingListEntryListRaw(requestParameters, initOverrides);
|
const response = await this.apiShoppingListEntryListRaw(requestParameters, initOverrides);
|
||||||
@@ -9266,7 +9251,7 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryPartialUpdateRaw(requestParameters: ApiShoppingListEntryPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ShoppingListEntry>> {
|
async apiShoppingListEntryPartialUpdateRaw(requestParameters: ApiShoppingListEntryPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ShoppingListEntry>> {
|
||||||
if (requestParameters['id'] == null) {
|
if (requestParameters['id'] == null) {
|
||||||
@@ -9298,7 +9283,7 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryPartialUpdate(requestParameters: ApiShoppingListEntryPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ShoppingListEntry> {
|
async apiShoppingListEntryPartialUpdate(requestParameters: ApiShoppingListEntryPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ShoppingListEntry> {
|
||||||
const response = await this.apiShoppingListEntryPartialUpdateRaw(requestParameters, initOverrides);
|
const response = await this.apiShoppingListEntryPartialUpdateRaw(requestParameters, initOverrides);
|
||||||
@@ -9306,7 +9291,7 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryRetrieveRaw(requestParameters: ApiShoppingListEntryRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ShoppingListEntry>> {
|
async apiShoppingListEntryRetrieveRaw(requestParameters: ApiShoppingListEntryRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ShoppingListEntry>> {
|
||||||
if (requestParameters['id'] == null) {
|
if (requestParameters['id'] == null) {
|
||||||
@@ -9335,7 +9320,7 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryRetrieve(requestParameters: ApiShoppingListEntryRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ShoppingListEntry> {
|
async apiShoppingListEntryRetrieve(requestParameters: ApiShoppingListEntryRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ShoppingListEntry> {
|
||||||
const response = await this.apiShoppingListEntryRetrieveRaw(requestParameters, initOverrides);
|
const response = await this.apiShoppingListEntryRetrieveRaw(requestParameters, initOverrides);
|
||||||
@@ -9343,7 +9328,7 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryUpdateRaw(requestParameters: ApiShoppingListEntryUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ShoppingListEntry>> {
|
async apiShoppingListEntryUpdateRaw(requestParameters: ApiShoppingListEntryUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ShoppingListEntry>> {
|
||||||
if (requestParameters['id'] == null) {
|
if (requestParameters['id'] == null) {
|
||||||
@@ -9382,7 +9367,7 @@ export class ApiApi extends runtime.BaseAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logs request counts to redis cache total/per user/
|
* individual entries of a shopping list automatically filtered to only contain unchecked items that are not older than the shopping recent days setting to not bloat endpoint
|
||||||
*/
|
*/
|
||||||
async apiShoppingListEntryUpdate(requestParameters: ApiShoppingListEntryUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ShoppingListEntry> {
|
async apiShoppingListEntryUpdate(requestParameters: ApiShoppingListEntryUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ShoppingListEntry> {
|
||||||
const response = await this.apiShoppingListEntryUpdateRaw(requestParameters, initOverrides);
|
const response = await this.apiShoppingListEntryUpdateRaw(requestParameters, initOverrides);
|
||||||
|
|||||||
@@ -64,10 +64,10 @@ import {
|
|||||||
export interface PatchedUserPreference {
|
export interface PatchedUserPreference {
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @type {number}
|
* @type {User}
|
||||||
* @memberof PatchedUserPreference
|
* @memberof PatchedUserPreference
|
||||||
*/
|
*/
|
||||||
user?: number;
|
readonly user?: User;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @type {UserFileView}
|
* @type {UserFileView}
|
||||||
@@ -257,7 +257,7 @@ export function PatchedUserPreferenceFromJSONTyped(json: any, ignoreDiscriminato
|
|||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
|
|
||||||
'user': json['user'] == null ? undefined : json['user'],
|
'user': json['user'] == null ? undefined : UserFromJSON(json['user']),
|
||||||
'image': json['image'] == null ? undefined : UserFileViewFromJSON(json['image']),
|
'image': json['image'] == null ? undefined : UserFileViewFromJSON(json['image']),
|
||||||
'theme': json['theme'] == null ? undefined : ThemeEnumFromJSON(json['theme']),
|
'theme': json['theme'] == null ? undefined : ThemeEnumFromJSON(json['theme']),
|
||||||
'navBgColor': json['nav_bg_color'] == null ? undefined : json['nav_bg_color'],
|
'navBgColor': json['nav_bg_color'] == null ? undefined : json['nav_bg_color'],
|
||||||
@@ -293,14 +293,13 @@ export function PatchedUserPreferenceToJSON(json: any): PatchedUserPreference {
|
|||||||
return PatchedUserPreferenceToJSONTyped(json, false);
|
return PatchedUserPreferenceToJSONTyped(json, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function PatchedUserPreferenceToJSONTyped(value?: Omit<PatchedUserPreference, 'food_inherit_default'|'food_children_exist'> | null, ignoreDiscriminator: boolean = false): any {
|
export function PatchedUserPreferenceToJSONTyped(value?: Omit<PatchedUserPreference, 'user'|'food_inherit_default'|'food_children_exist'> | null, ignoreDiscriminator: boolean = false): any {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
||||||
'user': value['user'],
|
|
||||||
'image': UserFileViewToJSON(value['image']),
|
'image': UserFileViewToJSON(value['image']),
|
||||||
'theme': ThemeEnumToJSON(value['theme']),
|
'theme': ThemeEnumToJSON(value['theme']),
|
||||||
'nav_bg_color': value['navBgColor'],
|
'nav_bg_color': value['navBgColor'],
|
||||||
|
|||||||
@@ -67,6 +67,12 @@ export interface ServerSettings {
|
|||||||
* @memberof ServerSettings
|
* @memberof ServerSettings
|
||||||
*/
|
*/
|
||||||
debug: boolean;
|
debug: boolean;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof ServerSettings
|
||||||
|
*/
|
||||||
|
version: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -81,6 +87,7 @@ export function instanceOfServerSettings(value: object): value is ServerSettings
|
|||||||
if (!('imprintUrl' in value) || value['imprintUrl'] === undefined) return false;
|
if (!('imprintUrl' in value) || value['imprintUrl'] === undefined) return false;
|
||||||
if (!('hosted' in value) || value['hosted'] === undefined) return false;
|
if (!('hosted' in value) || value['hosted'] === undefined) return false;
|
||||||
if (!('debug' in value) || value['debug'] === undefined) return false;
|
if (!('debug' in value) || value['debug'] === undefined) return false;
|
||||||
|
if (!('version' in value) || value['version'] === undefined) return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,6 +109,7 @@ export function ServerSettingsFromJSONTyped(json: any, ignoreDiscriminator: bool
|
|||||||
'imprintUrl': json['imprint_url'],
|
'imprintUrl': json['imprint_url'],
|
||||||
'hosted': json['hosted'],
|
'hosted': json['hosted'],
|
||||||
'debug': json['debug'],
|
'debug': json['debug'],
|
||||||
|
'version': json['version'],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,6 +132,7 @@ export function ServerSettingsToJSONTyped(value?: ServerSettings | null, ignoreD
|
|||||||
'imprint_url': value['imprintUrl'],
|
'imprint_url': value['imprintUrl'],
|
||||||
'hosted': value['hosted'],
|
'hosted': value['hosted'],
|
||||||
'debug': value['debug'],
|
'debug': value['debug'],
|
||||||
|
'version': value['version'],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -64,10 +64,10 @@ import {
|
|||||||
export interface UserPreference {
|
export interface UserPreference {
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @type {number}
|
* @type {User}
|
||||||
* @memberof UserPreference
|
* @memberof UserPreference
|
||||||
*/
|
*/
|
||||||
user: number;
|
readonly user: User;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @type {UserFileView}
|
* @type {UserFileView}
|
||||||
@@ -260,7 +260,7 @@ export function UserPreferenceFromJSONTyped(json: any, ignoreDiscriminator: bool
|
|||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
|
|
||||||
'user': json['user'],
|
'user': UserFromJSON(json['user']),
|
||||||
'image': json['image'] == null ? undefined : UserFileViewFromJSON(json['image']),
|
'image': json['image'] == null ? undefined : UserFileViewFromJSON(json['image']),
|
||||||
'theme': json['theme'] == null ? undefined : ThemeEnumFromJSON(json['theme']),
|
'theme': json['theme'] == null ? undefined : ThemeEnumFromJSON(json['theme']),
|
||||||
'navBgColor': json['nav_bg_color'] == null ? undefined : json['nav_bg_color'],
|
'navBgColor': json['nav_bg_color'] == null ? undefined : json['nav_bg_color'],
|
||||||
@@ -296,14 +296,13 @@ export function UserPreferenceToJSON(json: any): UserPreference {
|
|||||||
return UserPreferenceToJSONTyped(json, false);
|
return UserPreferenceToJSONTyped(json, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function UserPreferenceToJSONTyped(value?: Omit<UserPreference, 'food_inherit_default'|'food_children_exist'> | null, ignoreDiscriminator: boolean = false): any {
|
export function UserPreferenceToJSONTyped(value?: Omit<UserPreference, 'user'|'food_inherit_default'|'food_children_exist'> | null, ignoreDiscriminator: boolean = false): any {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
||||||
'user': value['user'],
|
|
||||||
'image': UserFileViewToJSON(value['image']),
|
'image': UserFileViewToJSON(value['image']),
|
||||||
'theme': ThemeEnumToJSON(value['theme']),
|
'theme': ThemeEnumToJSON(value['theme']),
|
||||||
'nav_bg_color': value['navBgColor'],
|
'nav_bg_color': value['navBgColor'],
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-container>
|
<v-container>
|
||||||
|
|
||||||
<v-row >
|
|
||||||
<v-col class="pb-0" cols="6" offset="3">
|
|
||||||
<v-text-field variant="solo" :placeholder="$t('Search') + ' (CTRL + K)'" ></v-text-field>
|
|
||||||
</v-col>
|
|
||||||
</v-row>
|
|
||||||
|
|
||||||
|
|
||||||
<horizontal-meal-plan-window></horizontal-meal-plan-window>
|
<horizontal-meal-plan-window></horizontal-meal-plan-window>
|
||||||
|
|
||||||
<!--TODO ideas for "start page": new recipes, meal plan, "last year/month/cooked long ago", high rated, random keyword -->
|
<!--TODO ideas for "start page": new recipes, meal plan, "last year/month/cooked long ago", high rated, random keyword -->
|
||||||
|
|||||||
@@ -550,10 +550,10 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.5.1.tgz#3124ec16cc0c7e04165b88dc091e6b97782fffa9"
|
resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.5.1.tgz#3124ec16cc0c7e04165b88dc091e6b97782fffa9"
|
||||||
integrity sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==
|
integrity sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==
|
||||||
|
|
||||||
"@vueform/multiselect@^2.6.8":
|
"@vueform/multiselect@^2.6.11":
|
||||||
version "2.6.8"
|
version "2.6.11"
|
||||||
resolved "https://registry.yarnpkg.com/@vueform/multiselect/-/multiselect-2.6.8.tgz#a8ea77788571f7ce92c650f536a4ed3784c5cea0"
|
resolved "https://registry.yarnpkg.com/@vueform/multiselect/-/multiselect-2.6.11.tgz#3585bf1989b969019cd6f8095c8a27d4d45c61e7"
|
||||||
integrity sha512-vu1bkFkViuLbrtSfyWgw11ecNPK7mlBDFe5X9WdsZj3gri3PiZ3OvlfJ920Ebysf7rgiN/+mHJDY2/Y1ITnGEg==
|
integrity sha512-iG4TGfqE3baftbSGF0PhoS+xZOCnV0ChkDo9rwhJ/Qi2YlCdb6tyQCjvyug3jnzncga8+d85kx0WvG7rDYFqiA==
|
||||||
|
|
||||||
"@vuetify/loader-shared@^2.0.3":
|
"@vuetify/loader-shared@^2.0.3":
|
||||||
version "2.0.3"
|
version "2.0.3"
|
||||||
|
|||||||
Reference in New Issue
Block a user