This commit is contained in:
sajjadtalkhabi
2026-05-21 15:51:32 +03:30
parent 8990ceaddd
commit 74227d5021
71 changed files with 2014 additions and 1666 deletions
@@ -95,11 +95,11 @@ import LineTitleBlock from '@/components/LineTitleBlock.vue'
import { useAdminSessionsListQuery } from '@/services/query/admin-sessions'
import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue'
import {
adminCourseTemplatesKeys,
useAdminTemplateSessionsQuery,
useAttachAdminTemplateSessionMutation,
useDetachAdminTemplateSessionMutation,
} from '@/services/query/admin-course-templates'
adminCoursesKeys,
useAdminCourseSessionsQuery,
useAttachAdminCourseSessionMutation,
useDetachAdminCourseSessionMutation,
} from '@/services/query/admin-courses'
defineOptions({ name: 'AddSessionToCourseModal' })
@@ -107,7 +107,7 @@ const queryClient = useQueryClient()
const { getModal } = useModal()
const modalData = computed(() => getModal('AddSessionToCourseModal')?.data ?? {})
const templateId = computed(() => modalData.value.templateId ?? null)
const courseId = computed(() => modalData.value.courseId ?? null)
const searchInput = ref('')
const searchQuery = ref('')
@@ -122,18 +122,18 @@ const sessions = computed(() => sessionsResponse.value?.data ?? [])
const attachedFilters = computed(() => ({}))
const attachedPagination = ref({ page: 1, perPage: 200 })
const { data: attachedResponse } = useAdminTemplateSessionsQuery(
templateId,
const { data: attachedResponse } = useAdminCourseSessionsQuery(
courseId,
attachedFilters,
attachedPagination,
{ enabled: () => !!templateId.value }
{ enabled: () => !!courseId.value }
)
const attachedIds = computed(() => new Set((attachedResponse.value?.data ?? []).map((s) => s.id)))
const isAttached = (id) => attachedIds.value.has(id)
const teacherName = (session) => {
const t = session.teacher || session.defaultTeacher
const t = session.teacher
if (!t) return '—'
return `${t.firstName || ''} ${t.lastName || ''}`.trim() || t.fullName || '—'
}
@@ -145,17 +145,17 @@ const onSearchInput = useDebounce(() => {
const pendingId = ref(null)
const attachMutation = useAttachAdminTemplateSessionMutation()
const detachMutation = useDetachAdminTemplateSessionMutation()
const attachMutation = useAttachAdminCourseSessionMutation()
const detachMutation = useDetachAdminCourseSessionMutation()
const invalidate = () => queryClient.invalidateQueries({ queryKey: adminCourseTemplatesKeys.all })
const invalidate = () => queryClient.invalidateQueries({ queryKey: adminCoursesKeys.all })
const onAttach = async (session) => {
if (!templateId.value) return
if (!courseId.value) return
pendingId.value = session.id
try {
await attachMutation.mutateAsync({
templateId: templateId.value,
courseId: courseId.value,
payload: { sessionIds: [session.id] },
})
invalidate()
@@ -165,17 +165,17 @@ const onAttach = async (session) => {
}
const onDetach = async (session) => {
if (!templateId.value) return
if (!courseId.value) return
pendingId.value = session.id
try {
await detachMutation.mutateAsync({ templateId: templateId.value, sessionId: session.id })
await detachMutation.mutateAsync({ courseId: courseId.value, sessionId: session.id })
invalidate()
} finally {
pendingId.value = null
}
}
watch(templateId, () => {
watch(courseId, () => {
searchInput.value = ''
searchQuery.value = ''
pendingId.value = null