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,