model delete page done

This commit is contained in:
vabene1111
2025-09-21 09:01:07 +02:00
parent b8a403b7c1
commit 3cb980c0e7
64 changed files with 482 additions and 68 deletions

View File

@@ -805,14 +805,7 @@ class Food(ExportModelOperationsMixin('food'), TreeModel, PermissionModelMixin):
self.delete() self.delete()
return target return target
def delete(self):
if self.ingredient_set.all().exclude(step=None).count() > 0:
raise ProtectedError(self.name + _(" is part of a recipe step and cannot be deleted"), self.ingredient_set.all().exclude(step=None))
else:
return super().delete()
# MP_Tree move uses raw SQL to execute move, override behavior to force a save triggering post_save signal # MP_Tree move uses raw SQL to execute move, override behavior to force a save triggering post_save signal
def move(self, *args, **kwargs): def move(self, *args, **kwargs):
super().move(*args, **kwargs) super().move(*args, **kwargs)
# treebeard bypasses ORM, need to explicity save to trigger post save signals retrieve the object again to avoid writing previous state back to disk # treebeard bypasses ORM, need to explicity save to trigger post save signals retrieve the object again to avoid writing previous state back to disk

View File

@@ -552,7 +552,9 @@ class DeleteRelationMixing:
collector.collect([obj]) collector.collect([obj])
return collector return collector
@extend_schema(responses=GenericModelReferenceSerializer(many=True)) @extend_schema(responses=GenericModelReferenceSerializer(many=True), parameters=[
OpenApiParameter(name='cache', description='If results can be cached or not', type=bool, default=True),
])
@decorators.action(detail=True, methods=['GET'], serializer_class=GenericModelReferenceSerializer) @decorators.action(detail=True, methods=['GET'], serializer_class=GenericModelReferenceSerializer)
@paginate @paginate
def protecting(self, request, pk): def protecting(self, request, pk):
@@ -562,11 +564,11 @@ class DeleteRelationMixing:
obj = self.queryset.filter(pk=pk, space=request.space).first() obj = self.queryset.filter(pk=pk, space=request.space).first()
if obj: if obj:
CACHE_KEY = f'DELETE_COLLECTOR_{request.space.pk}_PROTECTING_{obj.__class__.__name__}_{obj.pk}' CACHE_KEY = f'DELETE_COLLECTOR_{request.space.pk}_PROTECTING_{obj.__class__.__name__}_{obj.pk}'
if c := caches['default'].get(CACHE_KEY, None): cache = self.request.query_params.get('cache', "true") == "true"
return c if caches['default'].has_key(CACHE_KEY) and cache:
return caches['default'].get(CACHE_KEY)
collector = self.collect(obj) collector = self.collect(obj)
protected_objects = [] protected_objects = []
for o in collector.protected: for o in collector.protected:
protected_objects.append({ protected_objects.append({
@@ -580,7 +582,9 @@ class DeleteRelationMixing:
else: else:
return [] return []
@extend_schema(responses=GenericModelReferenceSerializer(many=True)) @extend_schema(responses=GenericModelReferenceSerializer(many=True), parameters=[
OpenApiParameter(name='cache', description='If results can be cached or not', type=bool, default=True),
])
@decorators.action(detail=True, methods=['GET'], serializer_class=GenericModelReferenceSerializer) @decorators.action(detail=True, methods=['GET'], serializer_class=GenericModelReferenceSerializer)
@paginate @paginate
def cascading(self, request, pk): def cascading(self, request, pk):
@@ -590,25 +594,29 @@ class DeleteRelationMixing:
obj = self.queryset.filter(pk=pk, space=request.space).first() obj = self.queryset.filter(pk=pk, space=request.space).first()
if obj: if obj:
CACHE_KEY = f'DELETE_COLLECTOR_{request.space.pk}_CASCADING_{obj.__class__.__name__}_{obj.pk}' CACHE_KEY = f'DELETE_COLLECTOR_{request.space.pk}_CASCADING_{obj.__class__.__name__}_{obj.pk}'
if c := caches['default'].get(CACHE_KEY, None): cache = self.request.query_params.get('cache', "true") == "true"
return c if caches['default'].has_key(CACHE_KEY) and cache:
return caches['default'].get(CACHE_KEY)
collector = self.collect(obj) collector = self.collect(obj)
cascading_objects = [] cascading_objects = []
for model, objs in collector.model_objs.items(): for model, objs in collector.model_objs.items():
for o in objs: for o in objs:
cascading_objects.append({ if o.pk != pk and o.__class__.__name__ != obj.__class__.__name__:
'id': o.pk, cascading_objects.append({
'model': o.__class__.__name__, 'id': o.pk,
'name': str(o), 'model': o.__class__.__name__,
}) 'name': str(o),
})
caches['default'].set(CACHE_KEY, cascading_objects, 60) caches['default'].set(CACHE_KEY, cascading_objects, 60)
return cascading_objects return cascading_objects
else: else:
return [] return []
@extend_schema(responses=GenericModelReferenceSerializer(many=True)) @extend_schema(responses=GenericModelReferenceSerializer(many=True), parameters=[
OpenApiParameter(name='cache', description='If results can be cached or not', type=bool, default=True),
])
@decorators.action(detail=True, methods=['GET'], serializer_class=GenericModelReferenceSerializer) @decorators.action(detail=True, methods=['GET'], serializer_class=GenericModelReferenceSerializer)
@paginate @paginate
def nulling(self, request, pk): def nulling(self, request, pk):
@@ -618,8 +626,9 @@ class DeleteRelationMixing:
obj = self.queryset.filter(pk=pk, space=request.space).first() obj = self.queryset.filter(pk=pk, space=request.space).first()
if obj: if obj:
CACHE_KEY = f'DELETE_COLLECTOR_{request.space.pk}_NULLING_{obj.__class__.__name__}_{obj.pk}' CACHE_KEY = f'DELETE_COLLECTOR_{request.space.pk}_NULLING_{obj.__class__.__name__}_{obj.pk}'
if c := caches['default'].get(CACHE_KEY, None): cache = self.request.query_params.get('cache', "true") == "true"
return c if caches['default'].has_key(CACHE_KEY) and cache:
return caches['default'].get(CACHE_KEY)
collector = self.collect(obj) collector = self.collect(obj)

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">
<v-row> <v-row>

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">
<v-text-field :label="$t('Name')" v-model="editingObj.name"></v-text-field> <v-text-field :label="$t('Name')" v-model="editingObj.name"></v-text-field>

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">
<v-text-field :label="$t('Name')" v-model="editingObj.name"></v-text-field> <v-text-field :label="$t('Name')" v-model="editingObj.name"></v-text-field>

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">
Coming Soon Coming Soon

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text class="pa-0"> <v-card-text class="pa-0">
<v-tabs v-model="tab" :disabled="loading" grow> <v-tabs v-model="tab" :disabled="loading" grow>

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">
<v-text-field :label="$t('Email')" v-model="editingObj.email"></v-text-field> <v-text-field :label="$t('Email')" v-model="editingObj.email"></v-text-field>

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text class="pa-0"> <v-card-text class="pa-0">
<v-tabs v-model="tab" :disabled="loading" grow> <v-tabs v-model="tab" :disabled="loading" grow>

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text class="pa-0"> <v-card-text class="pa-0">
<v-tabs v-model="tab" :disabled="loading" grow> <v-tabs v-model="tab" :disabled="loading" grow>

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">
<v-text-field v-model="editingObj.name" :label="$t('Name')"></v-text-field> <v-text-field v-model="editingObj.name" :label="$t('Name')"></v-text-field>

View File

@@ -14,9 +14,14 @@
</slot> </slot>
<v-divider></v-divider> <v-divider></v-divider>
<v-card-actions> <v-card-actions>
<v-btn color="delete" prepend-icon="$delete" v-if="isUpdate && !modelClass.model.disableDelete" :disabled="loading">{{ $t('Delete') }} <v-btn color="delete" prepend-icon="$delete" v-if="isUpdate && !modelClass.model.disableDelete && !modelClass.model.isAdvancedDelete" :disabled="loading">
{{ $t('Delete') }}
<delete-confirm-dialog :object-name="objectName" :model-name="$t(modelClass.model.localizationKey)" @delete="emit('delete')"></delete-confirm-dialog> <delete-confirm-dialog :object-name="objectName" :model-name="$t(modelClass.model.localizationKey)" @delete="emit('delete')"></delete-confirm-dialog>
</v-btn> </v-btn>
<v-btn color="delete" prepend-icon="$delete" v-if="isUpdate && !modelClass.model.disableDelete && modelClass.model.isAdvancedDelete"
:to="{name: 'ModelDeletePage', params: {model: modelClass.model.name, id: props.editingObject.id!}}" :disabled="loading">{{ $t('Delete') }}
</v-btn>
<v-btn color="save" prepend-icon="$create" @click="emit('save')" v-if="!isUpdate && !modelClass.model.disableCreate" :loading="loading">{{ $t('Create') }}</v-btn> <v-btn color="save" prepend-icon="$create" @click="emit('save')" v-if="!isUpdate && !modelClass.model.disableCreate" :loading="loading">{{ $t('Create') }}</v-btn>
<v-btn color="save" prepend-icon="$save" @click="emit('save')" v-if="isUpdate && !modelClass.model.disableUpdate" :loading="loading"> {{ $t('Save') }}</v-btn> <v-btn color="save" prepend-icon="$save" @click="emit('save')" v-if="isUpdate && !modelClass.model.disableUpdate" :loading="loading"> {{ $t('Save') }}</v-btn>
</v-card-actions> </v-card-actions>
@@ -41,10 +46,10 @@
<script setup lang="ts"> <script setup lang="ts">
import DeleteConfirmDialog from "@/components/dialogs/DeleteConfirmDialog.vue"; import DeleteConfirmDialog from "@/components/dialogs/DeleteConfirmDialog.vue";
import {GenericModel} from "@/types/Models"; import {EditorSupportedTypes, GenericModel} from "@/types/Models";
import VClosableCardTitle from "@/components/dialogs/VClosableCardTitle.vue"; import VClosableCardTitle from "@/components/dialogs/VClosableCardTitle.vue";
import {onBeforeRouteLeave, RouteLocationNormalized} from "vue-router"; import {onBeforeRouteLeave, RouteLocationNormalized} from "vue-router";
import {onBeforeUnmount, onMounted, ref} from "vue"; import {onBeforeUnmount, onMounted, PropType, ref} from "vue";
const emit = defineEmits(['save', 'delete', 'close']) const emit = defineEmits(['save', 'delete', 'close'])
@@ -53,6 +58,7 @@ const props = defineProps({
dialog: {type: Boolean, default: false}, dialog: {type: Boolean, default: false},
objectName: {type: String, default: ''}, objectName: {type: String, default: ''},
modelClass: {type: GenericModel, default: null}, modelClass: {type: GenericModel, default: null},
editingObject: {type: {} as PropType<EditorSupportedTypes>, default: null},
isUpdate: {type: Boolean, default: false}, isUpdate: {type: Boolean, default: false},
isChanged: {type: Boolean, default: false}, isChanged: {type: Boolean, default: false},
}) })

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form> <v-form>
<v-number-input :step="10" v-model="editingObj.propertyAmount" control-variant="stacked" :precision="2"> <v-number-input :step="10" v-model="editingObj.propertyAmount" control-variant="stacked" :precision="2">

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text class="pa-0"> <v-card-text class="pa-0">
<v-tabs v-model="tab" :disabled="loading" grow> <v-tabs v-model="tab" :disabled="loading" grow>

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text class="pa-0"> <v-card-text class="pa-0">
<v-tabs v-model="tab" :disabled="loading || fileApiLoading" grow> <v-tabs v-model="tab" :disabled="loading || fileApiLoading" grow>

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">
<v-number-input v-model="editingObj.amount" control-variant="split" :precision="2"> <v-number-input v-model="editingObj.amount" control-variant="split" :precision="2">

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text class="pa-0"> <v-card-text class="pa-0">
<v-tabs v-model="tab" :disabled="loading" grow> <v-tabs v-model="tab" :disabled="loading" grow>

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text class="pa-0"> <v-card-text class="pa-0">
<v-tabs v-model="tab" :disabled="loading" grow> <v-tabs v-model="tab" :disabled="loading" grow>

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form> <v-form>
<v-row> <v-row>

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading"> <v-form :disabled="loading">
<v-text-field :label="$t('Name')" v-model="editingObj.name"></v-text-field> <v-text-field :label="$t('Name')" v-model="editingObj.name"></v-text-field>
@@ -53,7 +54,6 @@ watch([() => props.item, () => props.itemId], () => {
// object specific data (for selects/display) // object specific data (for selects/display)
onMounted(() => { onMounted(() => {
initializeEditor() initializeEditor()
}) })
@@ -61,7 +61,7 @@ onMounted(() => {
/** /**
* component specific state setup logic * component specific state setup logic
*/ */
function initializeEditor(){ function initializeEditor() {
setupState(props.item, props.itemId, {itemDefaults: props.itemDefaults}) setupState(props.item, props.itemId, {itemDefaults: props.itemDefaults})
} }

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form :disabled="loading || fileApiLoading"> <v-form :disabled="loading || fileApiLoading">

View File

@@ -8,7 +8,8 @@
:is-update="isUpdate()" :is-update="isUpdate()"
:is-changed="editingObjChanged" :is-changed="editingObjChanged"
:model-class="modelClass" :model-class="modelClass"
:object-name="editingObjName()"> :object-name="editingObjName()"
:editing-object="editingObj">
<v-card-text> <v-card-text>
<v-form> <v-form>
<v-select :label="$t('Role')" :items="groups" item-value="id" item-title="name" return-object multiple v-model="editingObj.groups"></v-select> <v-select :label="$t('Role')" :items="groups" item-value="id" item-title="name" return-object multiple v-model="editingObj.groups"></v-select>

View File

@@ -188,6 +188,7 @@
"Meal_Types": "", "Meal_Types": "",
"Merge": "", "Merge": "",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "", "Merge_Keyword": "",
"Message": "", "Message": "",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -183,6 +183,7 @@
"Meal_Types": "Видове хранене", "Meal_Types": "Видове хранене",
"Merge": "Обединяване", "Merge": "Обединяване",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Обединяване на ключова дума", "Merge_Keyword": "Обединяване на ключова дума",
"MissingProperties": "", "MissingProperties": "",
"Month": "Месец", "Month": "Месец",

View File

@@ -239,6 +239,7 @@
"Meal_Types": "Tipus de menjars", "Meal_Types": "Tipus de menjars",
"Merge": "Unificar", "Merge": "Unificar",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Fusioneu paraula clau", "Merge_Keyword": "Fusioneu paraula clau",
"Message": "Missatge", "Message": "Missatge",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -237,6 +237,7 @@
"Meal_Types": "Druhy jídel", "Meal_Types": "Druhy jídel",
"Merge": "Spojit", "Merge": "Spojit",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Sloučit štítek", "Merge_Keyword": "Sloučit štítek",
"Message": "Zpráva", "Message": "Zpráva",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -239,6 +239,7 @@
"Meal_Types": "Måltidstyper", "Meal_Types": "Måltidstyper",
"Merge": "Sammenflet", "Merge": "Sammenflet",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Sammenflet nøgleord", "Merge_Keyword": "Sammenflet nøgleord",
"Message": "Besked", "Message": "Besked",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -323,6 +323,7 @@
"Meal_Types": "Mahlzeiten", "Meal_Types": "Mahlzeiten",
"Merge": "Zusammenführen", "Merge": "Zusammenführen",
"MergeAutomateHelp": "Erstelle eine Automatisierung, die auch zukünftig erstellte Objekte mit diesem Namen durch das gewählte Objekt ersetzt.", "MergeAutomateHelp": "Erstelle eine Automatisierung, die auch zukünftig erstellte Objekte mit diesem Namen durch das gewählte Objekt ersetzt.",
"MergeInsteadOfDelete": "Anstatt zu löschen kann diese {type} auch mit einer existierenden {type} zusammengeführt werden.",
"Merge_Keyword": "Schlagworte zusammenführen", "Merge_Keyword": "Schlagworte zusammenführen",
"Message": "Nachricht", "Message": "Nachricht",
"Messages": "Nachrichten", "Messages": "Nachrichten",

View File

@@ -239,6 +239,7 @@
"Meal_Types": "Είδη γευμάτων", "Meal_Types": "Είδη γευμάτων",
"Merge": "Συγχώνευση", "Merge": "Συγχώνευση",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Συγχώνευση λέξης-κλειδί", "Merge_Keyword": "Συγχώνευση λέξης-κλειδί",
"Message": "Μήνυμα", "Message": "Μήνυμα",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -321,6 +321,7 @@
"Meal_Types": "Meal types", "Meal_Types": "Meal types",
"Merge": "Merge", "Merge": "Merge",
"MergeAutomateHelp": "Create an automation that replaces future objects of this type with the selected object.", "MergeAutomateHelp": "Create an automation that replaces future objects of this type with the selected object.",
"MergeInsteadOfDelete": "Instead of deleting this {type}, you can merge it into another existing {type}.",
"Merge_Keyword": "Merge Keyword", "Merge_Keyword": "Merge Keyword",
"Message": "Message", "Message": "Message",
"Messages": "Messages", "Messages": "Messages",

View File

@@ -312,6 +312,7 @@
"Meal_Types": "Tipos de comida", "Meal_Types": "Tipos de comida",
"Merge": "Unificar", "Merge": "Unificar",
"MergeAutomateHelp": "Crea una automatización que reemplaza los futuros objetos de este tipo con el objeto seleccionado.", "MergeAutomateHelp": "Crea una automatización que reemplaza los futuros objetos de este tipo con el objeto seleccionado.",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Fusionar palabra clave", "Merge_Keyword": "Fusionar palabra clave",
"Message": "Mensaje", "Message": "Mensaje",
"Messages": "Mensajes", "Messages": "Mensajes",

View File

@@ -233,6 +233,7 @@
"Meal_Types": "Ateriatyypit", "Meal_Types": "Ateriatyypit",
"Merge": "Yhdistä", "Merge": "Yhdistä",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Yhdistä Avainsana", "Merge_Keyword": "Yhdistä Avainsana",
"Message": "Viesti", "Message": "Viesti",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -319,6 +319,7 @@
"Meal_Types": "Types de repas", "Meal_Types": "Types de repas",
"Merge": "Fusionner", "Merge": "Fusionner",
"MergeAutomateHelp": "Créer une automatisation pour remplacer les prochains objets de ce type par l'objet sélectionner.", "MergeAutomateHelp": "Créer une automatisation pour remplacer les prochains objets de ce type par l'objet sélectionner.",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Fusionner le mot-clé", "Merge_Keyword": "Fusionner le mot-clé",
"Message": "Message", "Message": "Message",
"Messages": "Messages", "Messages": "Messages",

View File

@@ -239,6 +239,7 @@
"Meal_Types": "סוגי אוכל", "Meal_Types": "סוגי אוכל",
"Merge": "איחוד", "Merge": "איחוד",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "איחוד מילת מפתח", "Merge_Keyword": "איחוד מילת מפתח",
"Message": "הודעה", "Message": "הודעה",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -239,6 +239,7 @@
"Meal_Types": "Tipovi obroka", "Meal_Types": "Tipovi obroka",
"Merge": "Spoji", "Merge": "Spoji",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Spoji ključnu riječ", "Merge_Keyword": "Spoji ključnu riječ",
"Message": "Poruka", "Message": "Poruka",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -220,6 +220,7 @@
"Meal_Types": "Étkezések", "Meal_Types": "Étkezések",
"Merge": "Összefűzés", "Merge": "Összefűzés",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Kulcsszó összevonása", "Merge_Keyword": "Kulcsszó összevonása",
"Message": "Üzenet", "Message": "Üzenet",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -104,6 +104,7 @@
"Meal_Plan": "Ճաշացուցակ", "Meal_Plan": "Ճաշացուցակ",
"Merge": "Միացնել", "Merge": "Միացնել",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Միացնել բանալի բառը", "Merge_Keyword": "Միացնել բանալի բառը",
"MissingProperties": "", "MissingProperties": "",
"MonthlyCredits": "", "MonthlyCredits": "",

View File

@@ -205,6 +205,7 @@
"Meal_Types": "", "Meal_Types": "",
"Merge": "Menggabungkan", "Merge": "Menggabungkan",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Gabungkan Kata Kunci", "Merge_Keyword": "Gabungkan Kata Kunci",
"Message": "", "Message": "",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -238,6 +238,7 @@
"Meal_Types": "", "Meal_Types": "",
"Merge": "", "Merge": "",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "", "Merge_Keyword": "",
"Message": "", "Message": "",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -321,6 +321,7 @@
"Meal_Types": "Tipi di pasto", "Meal_Types": "Tipi di pasto",
"Merge": "Unisci", "Merge": "Unisci",
"MergeAutomateHelp": "Crea un'automazione che sostituisce i futuri oggetti di questo tipo con l'oggetto selezionato.", "MergeAutomateHelp": "Crea un'automazione che sostituisce i futuri oggetti di questo tipo con l'oggetto selezionato.",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Unisci parola chiave", "Merge_Keyword": "Unisci parola chiave",
"Message": "Messaggio", "Message": "Messaggio",
"Messages": "Messaggi", "Messages": "Messaggi",

View File

@@ -222,6 +222,7 @@
"Meal_Types": "", "Meal_Types": "",
"Merge": "", "Merge": "",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Sujungti raktažodį", "Merge_Keyword": "Sujungti raktažodį",
"Message": "", "Message": "",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -239,6 +239,7 @@
"Meal_Types": "", "Meal_Types": "",
"Merge": "", "Merge": "",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "", "Merge_Keyword": "",
"Message": "", "Message": "",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -229,6 +229,7 @@
"Meal_Types": "Måltidstyper", "Meal_Types": "Måltidstyper",
"Merge": "Slå sammen", "Merge": "Slå sammen",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Slå sammen nøkkelord", "Merge_Keyword": "Slå sammen nøkkelord",
"Message": "Melding", "Message": "Melding",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -322,6 +322,7 @@
"Meal_Types": "Maaltijd types", "Meal_Types": "Maaltijd types",
"Merge": "Samenvoegen", "Merge": "Samenvoegen",
"MergeAutomateHelp": "Maak een automatisering aan die toekomstige objecten van dit type vervangt door het geselecteerde object.", "MergeAutomateHelp": "Maak een automatisering aan die toekomstige objecten van dit type vervangt door het geselecteerde object.",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Voeg trefwoord samen", "Merge_Keyword": "Voeg trefwoord samen",
"Message": "Bericht", "Message": "Bericht",
"Messages": "Berichten", "Messages": "Berichten",

View File

@@ -265,6 +265,7 @@
"Meal_Types": "Rodzaje posiłków", "Meal_Types": "Rodzaje posiłków",
"Merge": "Scal", "Merge": "Scal",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Scal słowa kluczowe", "Merge_Keyword": "Scal słowa kluczowe",
"Message": "Wiadomość", "Message": "Wiadomość",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -195,6 +195,7 @@
"Meal_Types": "Tipos de refeições", "Meal_Types": "Tipos de refeições",
"Merge": "Juntar", "Merge": "Juntar",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Unir palavra-chave", "Merge_Keyword": "Unir palavra-chave",
"MissingProperties": "", "MissingProperties": "",
"Month": "Mês", "Month": "Mês",

View File

@@ -319,6 +319,7 @@
"Meal_Types": "Tipos de Comida", "Meal_Types": "Tipos de Comida",
"Merge": "Mesclar", "Merge": "Mesclar",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Mesclar palavra-chave", "Merge_Keyword": "Mesclar palavra-chave",
"Message": "Mensagem", "Message": "Mensagem",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -214,6 +214,7 @@
"Meal_Types": "Tipuri de mese", "Meal_Types": "Tipuri de mese",
"Merge": "Unire", "Merge": "Unire",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Unește cuvânt cheie", "Merge_Keyword": "Unește cuvânt cheie",
"Message": "Mesaj", "Message": "Mesaj",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -321,6 +321,7 @@
"Meal_Types": "Типы питания", "Meal_Types": "Типы питания",
"Merge": "Объединить", "Merge": "Объединить",
"MergeAutomateHelp": "Создайте автоматизацию для замены будущих объектов этого типа на выбранный объект.", "MergeAutomateHelp": "Создайте автоматизацию для замены будущих объектов этого типа на выбранный объект.",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Объеденить ключевые слова", "Merge_Keyword": "Объеденить ключевые слова",
"Message": "Сообщение", "Message": "Сообщение",
"Messages": "Сообщения", "Messages": "Сообщения",

View File

@@ -321,6 +321,7 @@
"Meal_Types": "Tipi obroka", "Meal_Types": "Tipi obroka",
"Merge": "Združi", "Merge": "Združi",
"MergeAutomateHelp": "Ustvarite avtomatizacijo, ki bo prihodnje objekte te vrste nadomestila z izbranim objektom.", "MergeAutomateHelp": "Ustvarite avtomatizacijo, ki bo prihodnje objekte te vrste nadomestila z izbranim objektom.",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Združi ključno besedo", "Merge_Keyword": "Združi ključno besedo",
"Message": "Sporočilo", "Message": "Sporočilo",
"Messages": "Sporočila", "Messages": "Sporočila",

View File

@@ -276,6 +276,7 @@
"Meal_Types": "Måltidstyper", "Meal_Types": "Måltidstyper",
"Merge": "Slå samman", "Merge": "Slå samman",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Slå samman nyckelord", "Merge_Keyword": "Slå samman nyckelord",
"Message": "Meddelande", "Message": "Meddelande",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -239,6 +239,7 @@
"Meal_Types": "Yemek türleri", "Meal_Types": "Yemek türleri",
"Merge": "Birleştir", "Merge": "Birleştir",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Anahtar Kelimeyi Birleştir", "Merge_Keyword": "Anahtar Kelimeyi Birleştir",
"Message": "Mesaj", "Message": "Mesaj",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -212,6 +212,7 @@
"Meal_Types": "Типи страви", "Meal_Types": "Типи страви",
"Merge": "Об'єднати", "Merge": "Об'єднати",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "Об'єднати Ключове слово", "Merge_Keyword": "Об'єднати Ключове слово",
"MissingProperties": "", "MissingProperties": "",
"Month": "Місяць", "Month": "Місяць",

View File

@@ -239,6 +239,7 @@
"Meal_Types": "用餐类型", "Meal_Types": "用餐类型",
"Merge": "合并", "Merge": "合并",
"MergeAutomateHelp": "", "MergeAutomateHelp": "",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "合并关键词", "Merge_Keyword": "合并关键词",
"Message": "信息", "Message": "信息",
"MissingProperties": "", "MissingProperties": "",

View File

@@ -320,6 +320,7 @@
"Meal_Types": "餐飲類型", "Meal_Types": "餐飲類型",
"Merge": "合併", "Merge": "合併",
"MergeAutomateHelp": "建立一個自動化程序,將此類型的未來物件替換為選定的物件。", "MergeAutomateHelp": "建立一個自動化程序,將此類型的未來物件替換為選定的物件。",
"MergeInsteadOfDelete": "",
"Merge_Keyword": "合併關鍵字", "Merge_Keyword": "合併關鍵字",
"Message": "訊息", "Message": "訊息",
"Messages": "訊息", "Messages": "訊息",

View File

@@ -560,6 +560,7 @@ export interface ApiAiLogRetrieveRequest {
export interface ApiAiProviderCascadingListRequest { export interface ApiAiProviderCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -579,6 +580,7 @@ export interface ApiAiProviderListRequest {
export interface ApiAiProviderNullingListRequest { export interface ApiAiProviderNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -590,6 +592,7 @@ export interface ApiAiProviderPartialUpdateRequest {
export interface ApiAiProviderProtectingListRequest { export interface ApiAiProviderProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -664,6 +667,7 @@ export interface ApiBookmarkletImportUpdateRequest {
export interface ApiConnectorConfigCascadingListRequest { export interface ApiConnectorConfigCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -683,6 +687,7 @@ export interface ApiConnectorConfigListRequest {
export interface ApiConnectorConfigNullingListRequest { export interface ApiConnectorConfigNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -694,6 +699,7 @@ export interface ApiConnectorConfigPartialUpdateRequest {
export interface ApiConnectorConfigProtectingListRequest { export interface ApiConnectorConfigProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -801,6 +807,7 @@ export interface ApiEnterpriseSocialEmbedUpdateRequest {
export interface ApiEnterpriseSocialKeywordCascadingListRequest { export interface ApiEnterpriseSocialKeywordCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -839,6 +846,7 @@ export interface ApiEnterpriseSocialKeywordMoveUpdateRequest {
export interface ApiEnterpriseSocialKeywordNullingListRequest { export interface ApiEnterpriseSocialKeywordNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -850,6 +858,7 @@ export interface ApiEnterpriseSocialKeywordPartialUpdateRequest {
export interface ApiEnterpriseSocialKeywordProtectingListRequest { export interface ApiEnterpriseSocialKeywordProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -869,6 +878,7 @@ export interface ApiEnterpriseSocialRecipeBatchUpdateUpdateRequest {
export interface ApiEnterpriseSocialRecipeCascadingListRequest { export interface ApiEnterpriseSocialRecipeCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -942,6 +952,7 @@ export interface ApiEnterpriseSocialRecipeListRequest {
export interface ApiEnterpriseSocialRecipeNullingListRequest { export interface ApiEnterpriseSocialRecipeNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -953,6 +964,7 @@ export interface ApiEnterpriseSocialRecipePartialUpdateRequest {
export interface ApiEnterpriseSocialRecipeProtectingListRequest { export interface ApiEnterpriseSocialRecipeProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1046,6 +1058,7 @@ export interface ApiFoodBatchUpdateUpdateRequest {
export interface ApiFoodCascadingListRequest { export interface ApiFoodCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1093,6 +1106,7 @@ export interface ApiFoodMoveUpdateRequest {
export interface ApiFoodNullingListRequest { export interface ApiFoodNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1104,6 +1118,7 @@ export interface ApiFoodPartialUpdateRequest {
export interface ApiFoodProtectingListRequest { export interface ApiFoodProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1240,6 +1255,7 @@ export interface ApiInviteLinkUpdateRequest {
export interface ApiKeywordCascadingListRequest { export interface ApiKeywordCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1278,6 +1294,7 @@ export interface ApiKeywordMoveUpdateRequest {
export interface ApiKeywordNullingListRequest { export interface ApiKeywordNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1289,6 +1306,7 @@ export interface ApiKeywordPartialUpdateRequest {
export interface ApiKeywordProtectingListRequest { export interface ApiKeywordProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1340,6 +1358,7 @@ export interface ApiMealPlanUpdateRequest {
export interface ApiMealTypeCascadingListRequest { export interface ApiMealTypeCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1359,6 +1378,7 @@ export interface ApiMealTypeListRequest {
export interface ApiMealTypeNullingListRequest { export interface ApiMealTypeNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1370,6 +1390,7 @@ export interface ApiMealTypePartialUpdateRequest {
export interface ApiMealTypeProtectingListRequest { export interface ApiMealTypeProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1605,6 +1626,7 @@ export interface ApiPropertyRetrieveRequest {
export interface ApiPropertyTypeCascadingListRequest { export interface ApiPropertyTypeCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1625,6 +1647,7 @@ export interface ApiPropertyTypeListRequest {
export interface ApiPropertyTypeNullingListRequest { export interface ApiPropertyTypeNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1636,6 +1659,7 @@ export interface ApiPropertyTypePartialUpdateRequest {
export interface ApiPropertyTypeProtectingListRequest { export interface ApiPropertyTypeProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1660,6 +1684,7 @@ export interface ApiRecipeBatchUpdateUpdateRequest {
export interface ApiRecipeBookCascadingListRequest { export interface ApiRecipeBookCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1714,6 +1739,7 @@ export interface ApiRecipeBookListRequest {
export interface ApiRecipeBookNullingListRequest { export interface ApiRecipeBookNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1725,6 +1751,7 @@ export interface ApiRecipeBookPartialUpdateRequest {
export interface ApiRecipeBookProtectingListRequest { export interface ApiRecipeBookProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1740,6 +1767,7 @@ export interface ApiRecipeBookUpdateRequest {
export interface ApiRecipeCascadingListRequest { export interface ApiRecipeCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1851,6 +1879,7 @@ export interface ApiRecipeListRequest {
export interface ApiRecipeNullingListRequest { export interface ApiRecipeNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -1862,6 +1891,7 @@ export interface ApiRecipePartialUpdateRequest {
export interface ApiRecipeProtectingListRequest { export interface ApiRecipeProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2022,6 +2052,7 @@ export interface ApiStepUpdateRequest {
export interface ApiStorageCascadingListRequest { export interface ApiStorageCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2041,6 +2072,7 @@ export interface ApiStorageListRequest {
export interface ApiStorageNullingListRequest { export interface ApiStorageNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2052,6 +2084,7 @@ export interface ApiStoragePartialUpdateRequest {
export interface ApiStorageProtectingListRequest { export interface ApiStorageProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2067,12 +2100,14 @@ export interface ApiStorageUpdateRequest {
export interface ApiSupermarketCascadingListRequest { export interface ApiSupermarketCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
export interface ApiSupermarketCategoryCascadingListRequest { export interface ApiSupermarketCategoryCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2102,6 +2137,7 @@ export interface ApiSupermarketCategoryMergeUpdateRequest {
export interface ApiSupermarketCategoryNullingListRequest { export interface ApiSupermarketCategoryNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2113,6 +2149,7 @@ export interface ApiSupermarketCategoryPartialUpdateRequest {
export interface ApiSupermarketCategoryProtectingListRequest { export interface ApiSupermarketCategoryProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2176,6 +2213,7 @@ export interface ApiSupermarketListRequest {
export interface ApiSupermarketNullingListRequest { export interface ApiSupermarketNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2187,6 +2225,7 @@ export interface ApiSupermarketPartialUpdateRequest {
export interface ApiSupermarketProtectingListRequest { export interface ApiSupermarketProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2206,6 +2245,7 @@ export interface ApiSwitchActiveSpaceRetrieveRequest {
export interface ApiSyncCascadingListRequest { export interface ApiSyncCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2234,6 +2274,7 @@ export interface ApiSyncLogRetrieveRequest {
export interface ApiSyncNullingListRequest { export interface ApiSyncNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2245,6 +2286,7 @@ export interface ApiSyncPartialUpdateRequest {
export interface ApiSyncProtectingListRequest { export interface ApiSyncProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2265,6 +2307,7 @@ export interface ApiSyncUpdateRequest {
export interface ApiUnitCascadingListRequest { export interface ApiUnitCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2323,6 +2366,7 @@ export interface ApiUnitMergeUpdateRequest {
export interface ApiUnitNullingListRequest { export interface ApiUnitNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2334,6 +2378,7 @@ export interface ApiUnitPartialUpdateRequest {
export interface ApiUnitProtectingListRequest { export interface ApiUnitProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2349,6 +2394,7 @@ export interface ApiUnitUpdateRequest {
export interface ApiUserFileCascadingListRequest { export interface ApiUserFileCascadingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2379,6 +2425,7 @@ export interface ApiUserFileListRequest {
export interface ApiUserFileNullingListRequest { export interface ApiUserFileNullingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2397,6 +2444,7 @@ export interface ApiUserFilePartialUpdateRequest {
export interface ApiUserFileProtectingListRequest { export interface ApiUserFileProtectingListRequest {
id: number; id: number;
cache?: boolean;
page?: number; page?: number;
pageSize?: number; pageSize?: number;
} }
@@ -2907,6 +2955,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -3066,6 +3118,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -3151,6 +3207,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -3800,6 +3860,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -3959,6 +4023,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -4044,6 +4112,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -4939,6 +5011,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -5234,6 +5310,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -5319,6 +5399,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -5488,6 +5572,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -5949,6 +6037,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -6034,6 +6126,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -6861,6 +6957,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -7270,6 +7370,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -7355,6 +7459,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -8603,6 +8711,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -8898,6 +9010,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -8983,6 +9099,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -9436,6 +9556,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -9595,6 +9719,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -9680,6 +9808,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -11690,6 +11822,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -11853,6 +11989,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -11938,6 +12078,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -12154,6 +12298,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -12583,6 +12731,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -12668,6 +12820,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -12797,6 +12953,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -13608,6 +13768,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -13693,6 +13857,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -15215,6 +15383,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -15374,6 +15546,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -15459,6 +15635,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -15588,6 +15768,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -15633,6 +15817,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -15862,6 +16050,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -15947,6 +16139,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -16460,6 +16656,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -16545,6 +16745,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -16710,6 +16914,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -16944,6 +17152,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -17029,6 +17241,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -17205,6 +17421,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -17680,6 +17900,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -17765,6 +17989,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -17894,6 +18122,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -18148,6 +18380,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }
@@ -18277,6 +18513,10 @@ export class ApiApi extends runtime.BaseAPI {
const queryParameters: any = {}; const queryParameters: any = {};
if (requestParameters['cache'] != null) {
queryParameters['cache'] = requestParameters['cache'];
}
if (requestParameters['page'] != null) { if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page']; queryParameters['page'] = requestParameters['page'];
} }

View File

@@ -15,6 +15,13 @@
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
<v-row v-if="editingObj" dense>
<v-col>
<v-card>
<v-card-title class="text-h4">{{ $t('Delete') }} {{ $t(genericModel.model.localizationKey) }}: {{ genericModel.getLabel(editingObj) }}</v-card-title>
</v-card>
</v-col>
</v-row>
<v-row dense> <v-row dense>
<v-col> <v-col>
<v-card> <v-card>
@@ -59,8 +66,16 @@
</template> </template>
<template #item.actions="{item}"> <template #item.actions="{item}">
<v-btn icon="$delete" variant="plain" size="small" target="_blank" <v-btn icon="$delete" variant="plain" size="small" target="_blank"
v-if="getGenericModelFromString(item.model, $t) && getGenericModelFromString(item.model, $t).model.isAdvancedDelete"
:to="{name: 'ModelDeletePage', params: {model: item.model, id: item.id}}"></v-btn> :to="{name: 'ModelDeletePage', params: {model: item.model, id: item.id}}"></v-btn>
<v-btn icon="$delete" variant="plain" size="small"
v-if="getGenericModelFromString(item.model, $t) && !getGenericModelFromString(item.model, $t).model.isAdvancedDelete && !getGenericModelFromString(item.model, $t).model.disableDelete">
<v-icon icon="$delete" variant="plain" size="small"></v-icon>
<delete-confirm-dialog :object-name="genericModel.getLabel(editingObj)" :model-name="$t(genericModel.model.localizationKey)"
@delete="deleteRelated(item.model, item.id)"></delete-confirm-dialog>
</v-btn>
<v-btn icon="$edit" variant="plain" size="small" target="_blank" <v-btn icon="$edit" variant="plain" size="small" target="_blank"
v-if="getGenericModelFromString(item.model, $t) && getGenericModelFromString(item.model, $t).model.editorComponent"
:to="{name: 'ModelEditPage', params: {model: item.model, id: item.id}}"></v-btn> :to="{name: 'ModelEditPage', params: {model: item.model, id: item.id}}"></v-btn>
</template> </template>
</v-data-table-server> </v-data-table-server>
@@ -85,8 +100,16 @@
</template> </template>
<template #item.actions="{item}"> <template #item.actions="{item}">
<v-btn icon="$delete" variant="plain" size="small" target="_blank" <v-btn icon="$delete" variant="plain" size="small" target="_blank"
v-if="getGenericModelFromString(item.model, $t) && getGenericModelFromString(item.model, $t).model.isAdvancedDelete"
:to="{name: 'ModelDeletePage', params: {model: item.model, id: item.id}}"></v-btn> :to="{name: 'ModelDeletePage', params: {model: item.model, id: item.id}}"></v-btn>
<v-btn icon="$delete" variant="plain" size="small"
v-if="getGenericModelFromString(item.model, $t) && !getGenericModelFromString(item.model, $t).model.isAdvancedDelete && !getGenericModelFromString(item.model, $t).model.disableDelete">
<v-icon icon="$delete" variant="plain" size="small"></v-icon>
<delete-confirm-dialog :object-name="genericModel.getLabel(editingObj)" :model-name="$t(genericModel.model.localizationKey)"
@delete="deleteRelated(item.model, item.id)"></delete-confirm-dialog>
</v-btn>
<v-btn icon="$edit" variant="plain" size="small" target="_blank" <v-btn icon="$edit" variant="plain" size="small" target="_blank"
v-if="getGenericModelFromString(item.model, $t) && getGenericModelFromString(item.model, $t).model.editorComponent"
:to="{name: 'ModelEditPage', params: {model: item.model, id: item.id}}"></v-btn> :to="{name: 'ModelEditPage', params: {model: item.model, id: item.id}}"></v-btn>
</template> </template>
</v-data-table-server> </v-data-table-server>
@@ -111,8 +134,16 @@
</template> </template>
<template #item.actions="{item}"> <template #item.actions="{item}">
<v-btn icon="$delete" variant="plain" size="small" target="_blank" <v-btn icon="$delete" variant="plain" size="small" target="_blank"
v-if="getGenericModelFromString(item.model, $t) && getGenericModelFromString(item.model, $t).model.isAdvancedDelete"
:to="{name: 'ModelDeletePage', params: {model: item.model, id: item.id}}"></v-btn> :to="{name: 'ModelDeletePage', params: {model: item.model, id: item.id}}"></v-btn>
<v-btn icon="$delete" variant="plain" size="small"
v-if="getGenericModelFromString(item.model, $t) && !getGenericModelFromString(item.model, $t).model.isAdvancedDelete && !getGenericModelFromString(item.model, $t).model.disableDelete">
<v-icon icon="$delete" variant="plain" size="small"></v-icon>
<delete-confirm-dialog :object-name="genericModel.getLabel(editingObj)" :model-name="$t(genericModel.model.localizationKey)"
@delete="deleteRelated(item.model, item.id)"></delete-confirm-dialog>
</v-btn>
<v-btn icon="$edit" variant="plain" size="small" target="_blank" <v-btn icon="$edit" variant="plain" size="small" target="_blank"
v-if="getGenericModelFromString(item.model, $t) && getGenericModelFromString(item.model, $t).model.editorComponent"
:to="{name: 'ModelEditPage', params: {model: item.model, id: item.id}}"></v-btn> :to="{name: 'ModelEditPage', params: {model: item.model, id: item.id}}"></v-btn>
</template> </template>
</v-data-table-server> </v-data-table-server>
@@ -124,6 +155,24 @@
</v-col> </v-col>
</v-row> </v-row>
<v-row v-if="genericModel.model.isMerge" dense>
<v-col>
<v-card class="border-warning border-sm border-opacity-100">
<v-card-title>{{ $t('Merge') }}</v-card-title>
<v-card-text>
{{ $t('MergeInsteadOfDelete', {type: $t(genericModel.model.localizationKey)}) }}
</v-card-text>
<v-card-actions>
<v-btn color="warning" prepend-icon="fa-solid fa-arrows-to-dot">
{{ $t('Merge') }}
<model-merge-dialog :model="model" :source="[editingObj]"
@change="router.push({name: 'ModelListPage', params: {model: props.model}})"></model-merge-dialog>
</v-btn>
</v-card-actions>
</v-card>
</v-col>
</v-row>
<v-row dense> <v-row dense>
<v-col> <v-col>
<v-card class="border-error border-sm border-opacity-100"> <v-card class="border-error border-sm border-opacity-100">
@@ -132,7 +181,10 @@
{{ $t('delete_confirmation', {source: `${$t(genericModel.model.localizationKey)} ${genericModel.getLabel(editingObj)}`}) }} {{ $t('delete_confirmation', {source: `${$t(genericModel.model.localizationKey)} ${genericModel.getLabel(editingObj)}`}) }}
</v-card-text> </v-card-text>
<v-card-actions> <v-card-actions>
<v-btn color="delete" prepend-icon="$delete" :disabled="protectingObjectsCount > 0" @click="deleteObject()" :loading="deleteLoading">{{ $t('Delete') }}</v-btn> <v-btn color="delete" prepend-icon="$delete" :disabled="protectingObjectsCount > 0" @click="deleteObject()" :loading="deleteLoading">{{
$t('Delete')
}}
</v-btn>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
@@ -148,12 +200,14 @@ import {onBeforeMount, onMounted, PropType, ref} from "vue";
import {EditorSupportedModels, GenericModel, getGenericModelFromString} from "@/types/Models.ts"; import {EditorSupportedModels, GenericModel, getGenericModelFromString} from "@/types/Models.ts";
import {useTitle} from "@vueuse/core"; import {useTitle} from "@vueuse/core";
import {useI18n} from "vue-i18n"; import {useI18n} from "vue-i18n";
import {GenericModelReference} from "@/openapi"; import {ApiApi, GenericModelReference} from "@/openapi";
import {VDataTableUpdateOptions} from "@/vuetify.ts"; import {VDataTableUpdateOptions} from "@/vuetify.ts";
import {ErrorMessageType, useMessageStore} from "@/stores/MessageStore.ts"; import {ErrorMessageType, useMessageStore} from "@/stores/MessageStore.ts";
import {useRouter} from "vue-router"; import {useRouter} from "vue-router";
import {VDataTableHeaders} from "vuetify/components"; import {VDataTableHeaders} from "vuetify/components";
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore.ts"; import {useUserPreferenceStore} from "@/stores/UserPreferenceStore.ts";
import ModelMergeDialog from "@/components/dialogs/ModelMergeDialog.vue";
import DeleteConfirmDialog from "@/components/dialogs/DeleteConfirmDialog.vue";
const router = useRouter() const router = useRouter()
const title = useTitle() const title = useTitle()
@@ -207,6 +261,9 @@ onMounted(() => {
reloadAll() reloadAll()
}) })
/**
* load data for the selected object
*/
function loadObject() { function loadObject() {
genericModel.value.retrieve(Number(props.id)).then(obj => { genericModel.value.retrieve(Number(props.id)).then(obj => {
editingObj.value = obj editingObj.value = obj
@@ -216,6 +273,9 @@ function loadObject() {
}) })
} }
/**
* delete the selected object and redirect to model list if successfull
*/
function deleteObject() { function deleteObject() {
deleteLoading.value = true deleteLoading.value = true
genericModel.value.destroy(Number(props.id)).then(() => { genericModel.value.destroy(Number(props.id)).then(() => {
@@ -227,16 +287,24 @@ function deleteObject() {
}) })
} }
function reloadAll() { /**
loadProtected({page: 1, itemsPerPage: pageSize.value}) * reload all related endpoints
loadCascading({page: 1, itemsPerPage: pageSize.value}) * @param cache if reload should occur using cached data or not
loadNulling({page: 1, itemsPerPage: pageSize.value}) */
function reloadAll(cache: boolean = true) {
loadProtected({page: 1, itemsPerPage: pageSize.value}, cache)
loadCascading({page: 1, itemsPerPage: pageSize.value}, cache)
loadNulling({page: 1, itemsPerPage: pageSize.value}, cache)
} }
function loadProtected(options: VDataTableUpdateOptions) { /**
* load all objects protecting the selected object from being deleted
* @param options VDataTableUpdateOptions
* @param cache if reload should occur using cached data or not
*/
function loadProtected(options: VDataTableUpdateOptions, cache: boolean = true) {
protectingObjectsLoading.value = true protectingObjectsLoading.value = true
genericModel.value.getDeleteProtecting({id: Number(props.id), page: options.page, pageSize: options.itemsPerPage}).then(r => { genericModel.value.getDeleteProtecting({id: Number(props.id), page: options.page, pageSize: options.itemsPerPage, cache: cache}).then(r => {
protectingObjects.value = r.results protectingObjects.value = r.results
protectingObjectsCount.value = r.count protectingObjectsCount.value = r.count
}).catch(err => { }).catch(err => {
@@ -246,10 +314,15 @@ function loadProtected(options: VDataTableUpdateOptions) {
}) })
} }
function loadCascading(options: VDataTableUpdateOptions) { /**
* load all objects that will cascade when the selected model is deleted
* @param options VDataTableUpdateOptions
* @param cache if reload should occur using cached data or not
*/
function loadCascading(options: VDataTableUpdateOptions, cache: boolean = true) {
cascadingObjectsLoading.value = true cascadingObjectsLoading.value = true
genericModel.value.getDeleteCascading({id: Number(props.id), page: options.page, pageSize: options.itemsPerPage}).then(r => { genericModel.value.getDeleteCascading({id: Number(props.id), page: options.page, pageSize: options.itemsPerPage, cache: cache}).then(r => {
cascadingObjects.value = r.results cascadingObjects.value = r.results
cascadingObjectsCount.value = r.count cascadingObjectsCount.value = r.count
}).catch(err => { }).catch(err => {
@@ -260,10 +333,15 @@ function loadCascading(options: VDataTableUpdateOptions) {
} }
function loadNulling(options: VDataTableUpdateOptions) { /**
* load all objects that will be updated when the selected model is deleted
* @param options VDataTableUpdateOptions
* @param cache if reload should occur using cached data or not
*/
function loadNulling(options: VDataTableUpdateOptions, cache: boolean = true) {
nullingObjectsLoading.value = true nullingObjectsLoading.value = true
genericModel.value.getDeleteNulling({id: Number(props.id), page: options.page, pageSize: options.itemsPerPage}).then(r => { genericModel.value.getDeleteNulling({id: Number(props.id), page: options.page, pageSize: options.itemsPerPage, cache: cache}).then(r => {
nullingObjects.value = r.results nullingObjects.value = r.results
nullingObjectsCount.value = r.count nullingObjectsCount.value = r.count
}).catch(err => { }).catch(err => {
@@ -274,6 +352,22 @@ function loadNulling(options: VDataTableUpdateOptions) {
} }
/**
* generic model delete function to quickly delete related models
* @param model
* @param id
*/
function deleteRelated(model: EditorSupportedModels, id: number) {
let genericModel = getGenericModelFromString(model, t)
if (genericModel) {
genericModel.destroy(id).then(() => {
reloadAll(false)
}).catch(err => {
useMessageStore().addError(ErrorMessageType.DELETE_ERROR, err)
})
}
}
</script> </script>
<style scoped> <style scoped>

View File

@@ -29,11 +29,11 @@ type VDataTableProps = InstanceType<typeof VDataTable>['$props']
* @param t translation function from calling context * @param t translation function from calling context
* @return instance of GenericModel * @return instance of GenericModel
*/ */
export function getGenericModelFromString(modelName: EditorSupportedModels, t: any) { export function getGenericModelFromString(modelName: EditorSupportedModels, t: any): false|GenericModel {
if (SUPPORTED_MODELS.has(modelName.toLowerCase())) { if (SUPPORTED_MODELS.has(modelName.toLowerCase())) {
return new GenericModel(SUPPORTED_MODELS.get(modelName.toLowerCase()), t) return new GenericModel(SUPPORTED_MODELS.get(modelName.toLowerCase()), t)
} else { } else {
throw Error(`Model ${modelName} not in SUPPORTED_MODELS`) return false
} }
} }
@@ -74,6 +74,7 @@ type DeleteRelationRequestParameter = {
page: number, page: number,
pageSize: number, pageSize: number,
id: number, id: number,
cache: boolean,
} }
/** /**
@@ -111,9 +112,9 @@ export type Model = {
disableUpdate?: boolean | undefined, disableUpdate?: boolean | undefined,
disableDelete?: boolean | undefined, disableDelete?: boolean | undefined,
disableSearch?: boolean | undefined, disableSearch?: boolean | undefined,
// disable showing this model as an option in the ModelListPage
disableListView?: boolean | undefined, disableListView?: boolean | undefined,
isAdvancedDelete: boolean | undefined,
isPaginated: boolean | undefined, isPaginated: boolean | undefined,
isMerge?: boolean | undefined, isMerge?: boolean | undefined,
mergeAutomation?: string | AutomationTypeEnum, mergeAutomation?: string | AutomationTypeEnum,
@@ -208,6 +209,7 @@ export const TFood = {
editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/FoodEditor.vue`)), editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/FoodEditor.vue`)),
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
isMerge: true, isMerge: true,
isTree: true, isTree: true,
mergeAutomation: 'FOOD_ALIAS', mergeAutomation: 'FOOD_ALIAS',
@@ -231,6 +233,7 @@ export const TUnit = {
editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/UnitEditor.vue`)), editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/UnitEditor.vue`)),
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
isMerge: true, isMerge: true,
mergeAutomation: 'UNIT_ALIAS', mergeAutomation: 'UNIT_ALIAS',
toStringKeys: ['name'], toStringKeys: ['name'],
@@ -252,6 +255,7 @@ export const TKeyword = {
editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/KeywordEditor.vue`)), editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/KeywordEditor.vue`)),
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
isMerge: true, isMerge: true,
isTree: true, isTree: true,
mergeAutomation: 'KEYWORD_ALIAS', mergeAutomation: 'KEYWORD_ALIAS',
@@ -273,6 +277,7 @@ export const TRecipe = {
editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/RecipeEditor.vue`)), editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/RecipeEditor.vue`)),
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
toStringKeys: ['name'], toStringKeys: ['name'],
disableListView: true, disableListView: true,
@@ -329,6 +334,7 @@ export const TMealType = {
editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/MealTypeEditor.vue`)), editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/MealTypeEditor.vue`)),
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
toStringKeys: ['name'], toStringKeys: ['name'],
tableHeaders: [ tableHeaders: [
@@ -368,6 +374,7 @@ export const TRecipeBook = {
editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/RecipeBookEditor.vue`)), editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/RecipeBookEditor.vue`)),
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
toStringKeys: ['name'], toStringKeys: ['name'],
disableListView: true, disableListView: true,
@@ -447,6 +454,7 @@ export const TSupermarket = {
editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/SupermarketEditor.vue`)), editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/SupermarketEditor.vue`)),
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
toStringKeys: ['name'], toStringKeys: ['name'],
tableHeaders: [ tableHeaders: [
@@ -465,6 +473,7 @@ export const TSupermarketCategory = {
editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/SupermarketCategoryEditor.vue`)), editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/SupermarketCategoryEditor.vue`)),
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
isMerge: true, isMerge: true,
toStringKeys: ['name'], toStringKeys: ['name'],
@@ -505,6 +514,7 @@ export const TPropertyType = {
editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/PropertyTypeEditor.vue`)), editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/PropertyTypeEditor.vue`)),
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
toStringKeys: ['name'], toStringKeys: ['name'],
tableHeaders: [ tableHeaders: [
@@ -565,6 +575,7 @@ export const TUserFile = {
editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/UserFileEditor.vue`)), editorComponent: defineAsyncComponent(() => import(`@/components/model_editors/UserFileEditor.vue`)),
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
toStringKeys: ['name'], toStringKeys: ['name'],
tableHeaders: [ tableHeaders: [
@@ -729,6 +740,7 @@ export const TStorage = {
disableListView: false, disableListView: false,
toStringKeys: ['name'], toStringKeys: ['name'],
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
tableHeaders: [ tableHeaders: [
{title: 'Name', key: 'name'}, {title: 'Name', key: 'name'},
@@ -748,6 +760,7 @@ export const TSync = {
disableListView: false, disableListView: false,
toStringKeys: ['path'], toStringKeys: ['path'],
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
tableHeaders: [ tableHeaders: [
{title: 'SyncedPath', key: 'path'}, {title: 'SyncedPath', key: 'path'},
@@ -815,6 +828,7 @@ export const TConnectorConfig = {
disableListView: false, disableListView: false,
toStringKeys: ['name'], toStringKeys: ['name'],
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
disableCreate: false, disableCreate: false,
disableDelete: false, disableDelete: false,
@@ -839,6 +853,7 @@ export const TAiProvider = {
disableListView: false, disableListView: false,
toStringKeys: ['name'], toStringKeys: ['name'],
isPaginated: true, isPaginated: true,
isAdvancedDelete: true,
disableCreate: false, disableCreate: false,
disableDelete: false, disableDelete: false,