From af9d55e6510ea830ed5b312f5513851666445c29 Mon Sep 17 00:00:00 2001
From: madresebanoo
Date: Sun, 20 Sep 2026 16:55:13 +0430
Subject: [PATCH] feat(admin): wire up remove-student-from-term button
The mutation/API plumbing already existed (useRemoveAdminTermStudentMutation)
but no UI ever called it. Adds a delete action to each row in the term
details modal's seminarians list, with a confirmation prompt.
---
.../components/modals/TermDetailsModal.vue | 38 ++++++++++++++++++-
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/src/features/admin/terms/components/modals/TermDetailsModal.vue b/src/features/admin/terms/components/modals/TermDetailsModal.vue
index 86108af..f9b2fa4 100644
--- a/src/features/admin/terms/components/modals/TermDetailsModal.vue
+++ b/src/features/admin/terms/components/modals/TermDetailsModal.vue
@@ -70,6 +70,18 @@
+
+
+
+
+
+
+
@@ -130,18 +142,24 @@ import BaseButton from '@/components/BaseButton.vue'
import SvgIcon from '@/components/icons/SvgIcon.vue'
import NoItems from '@/components/blocks/NoItems.vue'
import { formatJalaaliDate } from '@/utils/date-utils'
+import CircleButton from '@/components/CircleButton.vue'
import TabsBlock from '@/components/blocks/TabsBlock.vue'
import { usePagination } from '@/composables/usePagination'
import LineTitleBlock from '@/components/LineTitleBlock.vue'
import LineInfoBlock from '@/components/blocks/LineInfoBlock.vue'
import PaginationBlock from '@/components/blocks/PaginationBlock.vue'
import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue'
-import { useAdminTermEnrolleesQuery, useAdminTermQuery } from '@/services/query/admin-terms'
import {
adminCoursesKeys,
useAdminCoursesListQuery,
useUpdateAdminCourseMutation,
} from '@/services/query/admin-courses'
+import {
+ adminTermsKeys,
+ useAdminTermEnrolleesQuery,
+ useAdminTermQuery,
+ useRemoveAdminTermStudentMutation,
+} from '@/services/query/admin-terms'
defineOptions({ name: 'TermDetailsModal' })
@@ -187,6 +205,24 @@ const studentPaginationMeta = computed(() => ({
const studentAvatar = (student) => student.avatarUrl || student.avatarDownloadUrl || ''
+const invalidateStudents = () => queryClient.invalidateQueries({ queryKey: adminTermsKeys.all })
+
+const removeStudentMutation = useRemoveAdminTermStudentMutation()
+
+const onAskRemoveStudent = (student) => {
+ openModal('ConfirmModal', {
+ title: `حذف ${student?.user?.name || 'طلبه'}`,
+ message: `بعد از حذف، دسترسی ${
+ student?.user?.name || 'این طلبه'
+ } به این ترم و محتوای آن قطع میشود. آیا مطمئن هستید؟`,
+ onConfirm: () =>
+ removeStudentMutation.mutate(
+ { termId: termId.value, userId: student.user.id },
+ { onSuccess: invalidateStudents }
+ ),
+ })
+}
+
const courseFilters = computed(() => ({ termId: termId.value }))
const { pagination: coursePagination, setPage: setCoursePage } = usePagination({
page: 1,