diff --git a/packages/components-vue/src/components/pagination/ContentTable.vue b/packages/components-vue/src/components/pagination/ContentTable.vue index b51a8c3..b513129 100644 --- a/packages/components-vue/src/components/pagination/ContentTable.vue +++ b/packages/components-vue/src/components/pagination/ContentTable.vue @@ -114,6 +114,7 @@ iGetPage, iNodeFn, iNodeStreamFn, + tProp, tThemeModifier, tThemeTuple, } from "@open-xamu-co/ui-common-types"; @@ -146,7 +147,7 @@ noContentMessage?: string; renderErrorMessage?: string; tableProps?: Omit, "nodes" | "refresh">; - theme?: tThemeModifier | tThemeTuple; + theme?: tThemeTuple | tProp; /** * Whether to fetch data on client side only */ diff --git a/packages/components-vue/src/components/table/Simple.vue b/packages/components-vue/src/components/table/Simple.vue index 326eef6..ffab601 100644 --- a/packages/components-vue/src/components/table/Simple.vue +++ b/packages/components-vue/src/components/table/Simple.vue @@ -629,9 +629,7 @@ * * @batch */ - async function deleteNodesAndRefresh( - nodes = props.nodes.filter((_, nodeIndex) => selectedNodes.value[nodeIndex]) - ) { + async function deleteNodesAndRefresh() { // Request confirmation const { value } = await Swal.firePrevent({ title: t("table_delete"), @@ -644,11 +642,19 @@ // Display loader Swal.fireLoader(); + const queue = props.nodes.reduce<{ node: T; selectedIndex: number }[]>( + (acc, node, selectedIndex) => { + if (selectedNodes.value[selectedIndex]) acc.push({ node, selectedIndex }); + + return acc; + }, + [] + ); const updatedNodes: T[] = [...props.nodes]; const streams: Promise[] = []; // Run processes in parallel, get deletion responses const deleted: iNodeFnResponse[] = await Promise.all( - nodes.map(async (node) => { + queue.map(async ({ node, selectedIndex }) => { const [deletedNodeStream, ...response] = await useResolveNodeFn( props.deleteNode?.(node) ); @@ -660,10 +666,13 @@ streams.push(...stream); // Remove deleted node - const nodeIndex = updatedNodes.findIndex(({ id }) => id === node.id); + const deletedIndex = updatedNodes.findIndex(({ id }) => id === node.id); - // Remove single node - if (nodeIndex > -1) updatedNodes.splice(nodeIndex, 1); + // Remove single node & clear selection + if (deletedIndex > -1) { + updatedNodes.splice(deletedIndex, 1); + selectedNodes.value[selectedIndex] = false; + } return [deletedNode, ...response]; }) diff --git a/packages/components-vue/src/types/props/table.ts b/packages/components-vue/src/types/props/table.ts index 61fec59..9fb5cc9 100644 --- a/packages/components-vue/src/types/props/table.ts +++ b/packages/components-vue/src/types/props/table.ts @@ -288,5 +288,5 @@ export interface iTableChildProps< * * @batch */ - deleteNodesAndRefresh(nodes?: Ti[]): Promise; + deleteNodesAndRefresh(): Promise; }