1
0
mirror of https://github.com/TandoorRecipes/recipes.git synced 2026-01-11 09:07:12 -05:00

added batch delete dialog

This commit is contained in:
vabene1111
2025-08-20 21:47:43 +02:00
parent 45a567856a
commit a30deb4bae
36 changed files with 191 additions and 9 deletions

View File

@@ -36,9 +36,10 @@
<v-row>
<v-col>
<v-text-field prepend-inner-icon="$search" :label="$t('Search')" v-model="searchQuery" clearable></v-text-field>
<v-data-table-server
v-model="selectedItems"
return-object
@update:options="loadItems"
:items="items"
:items-length="itemCount"
@@ -46,14 +47,23 @@
:search="searchQuery"
:headers="genericModel.getTableHeaders()"
:items-per-page-options="itemsPerPageOptions"
:show-select="tableShowSelect"
:show-select="!genericModel.model.disableDelete || genericModel.model.isMerge"
:page="tablePage"
:items-per-page="useUserPreferenceStore().deviceSettings.general_tableItemsPerPage"
disable-sort
>
<!-- <template v-slot:header.action v-if="selectedItems.length > 0">-->
<!-- <v-select density="compact" hide-details></v-select>-->
<!-- </template>-->
<template v-slot:header.action v-if="selectedItems.length > 0">
<v-btn icon="fa-solid fa-ellipsis-v" variant="plain" color="info">
<v-icon icon="fa-solid fa-ellipsis-v"></v-icon>
<v-menu activator="parent" close-on-content-click>
<v-list density="compact" class="pt-1 pb-1" activatable>
<v-list-item prepend-icon="$delete" @click="batchDeleteDialog = true">
{{ $t('Delete_All') }}
</v-list-item>
</v-list>
</v-menu>
</v-btn>
</template>
<template v-slot:item.action="{ item }">
<v-btn class="float-right" icon="$menu" variant="plain">
<v-icon icon="$menu"></v-icon>
@@ -90,6 +100,9 @@
</v-data-table-server>
</v-col>
</v-row>
<batch-delete-dialog :items="selectedItems" :model="props.model" v-model="batchDeleteDialog" activator="model"
@change="loadItems({page: tablePage, itemsPerPage: useUserPreferenceStore().deviceSettings.general_tableItemsPerPage, search: searchQuery})"></batch-delete-dialog>
</v-container>
</template>
@@ -99,7 +112,7 @@
import {onBeforeMount, PropType, ref, watch} from "vue";
import {ErrorMessageType, useMessageStore} from "@/stores/MessageStore";
import {useI18n} from "vue-i18n";
import {EditorSupportedModels, GenericModel, getGenericModelFromString, Model,} from "@/types/Models";
import {EditorSupportedModels, EditorSupportedTypes, GenericModel, getGenericModelFromString, Model,} from "@/types/Models";
import ModelEditDialog from "@/components/dialogs/ModelEditDialog.vue";
import {useRoute, useRouter} from "vue-router";
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
@@ -108,6 +121,9 @@ import {VDataTableUpdateOptions} from "@/vuetify";
import SyncDialog from "@/components/dialogs/SyncDialog.vue";
import {ApiApi, RecipeImport} from "@/openapi";
import {useTitle} from "@vueuse/core";
import RecipeShareDialog from "@/components/dialogs/RecipeShareDialog.vue";
import AddToShoppingDialog from "@/components/dialogs/AddToShoppingDialog.vue";
import BatchDeleteDialog from "@/components/dialogs/BatchDeleteDialog.vue";
const {t} = useI18n()
const router = useRouter()
@@ -130,8 +146,9 @@ const itemsPerPageOptions = [
const tablePage = ref(1)
const tableShowSelect = ref(true)
const selectedItems = ref([] as GenericModel[])
const selectedItems = ref([] as EditorSupportedTypes[])
const batchDeleteDialog = ref(false)
// data
const loading = ref(false);
@@ -185,6 +202,7 @@ onBeforeMount(() => {
function loadItems(options: VDataTableUpdateOptions) {
loading.value = true
selectedItems.value = []
window.scrollTo({top: 0, behavior: 'smooth'})
if (tablePage.value != options.page) {