fix: user changes
This commit is contained in:
@@ -1,9 +1,14 @@
|
||||
<template>
|
||||
<BasicModal width="95%" max-width="42rem" min-width="auto" :show-close-button="true">
|
||||
<BasicModal
|
||||
title="افزودن جلسه"
|
||||
title-en="Add"
|
||||
width="95%"
|
||||
max-width="42rem"
|
||||
min-width="auto"
|
||||
:show-close-button="true"
|
||||
>
|
||||
<template #default="{ close }">
|
||||
<div class="add-session">
|
||||
<LineTitleBlock title="افزودن جلسه" title-en="Add" />
|
||||
|
||||
<div class="add-session__search">
|
||||
<SvgIcon name="book" :size="18" color="var(--color-thd-gray)" />
|
||||
<input
|
||||
@@ -37,20 +42,6 @@
|
||||
</div>
|
||||
|
||||
<CircleButton
|
||||
v-if="isAttached(session.id)"
|
||||
tooltip="حذف از دوره"
|
||||
bg-color="rgba(104, 104, 104, 0.05)"
|
||||
size="2.25rem"
|
||||
type="button"
|
||||
:loading="pendingId === session.id"
|
||||
@click="onDetach(session)"
|
||||
>
|
||||
<template #icon>
|
||||
<SvgIcon name="trash" :size="16" color="var(--color-error)" />
|
||||
</template>
|
||||
</CircleButton>
|
||||
<CircleButton
|
||||
v-else
|
||||
tooltip="افزودن به دوره"
|
||||
bg-color="rgba(104, 104, 104, 0.05)"
|
||||
size="2.25rem"
|
||||
@@ -92,14 +83,13 @@ import SvgIcon from '@/components/icons/SvgIcon.vue'
|
||||
import NoItems from '@/components/blocks/NoItems.vue'
|
||||
import CircleButton from '@/components/CircleButton.vue'
|
||||
import LineTitleBlock from '@/components/LineTitleBlock.vue'
|
||||
import { useAdminSessionsListQuery } from '@/services/query/admin-sessions'
|
||||
import { adminCoursesKeys } from '@/services/query/admin-courses'
|
||||
import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue'
|
||||
import {
|
||||
adminCoursesKeys,
|
||||
useAdminCourseSessionsQuery,
|
||||
useAttachAdminCourseSessionMutation,
|
||||
useDetachAdminCourseSessionMutation,
|
||||
} from '@/services/query/admin-courses'
|
||||
adminSessionsKeys,
|
||||
useAdminSessionsListQuery,
|
||||
useUpdateAdminSessionMutation,
|
||||
} from '@/services/query/admin-sessions'
|
||||
|
||||
defineOptions({ name: 'AddSessionToCourseModal' })
|
||||
|
||||
@@ -111,8 +101,8 @@ const courseId = computed(() => modalData.value.courseId ?? null)
|
||||
|
||||
const searchInput = ref('')
|
||||
const searchQuery = ref('')
|
||||
const sessionFilters = computed(() => ({ title: searchQuery.value }))
|
||||
const sessionPagination = ref({ page: 1, perPage: 20 })
|
||||
const sessionFilters = computed(() => ({ search: searchQuery.value }))
|
||||
const sessionPagination = ref({ page: 1, perPage: 10 })
|
||||
|
||||
const { data: sessionsResponse, isLoading } = useAdminSessionsListQuery(
|
||||
sessionFilters,
|
||||
@@ -120,18 +110,6 @@ const { data: sessionsResponse, isLoading } = useAdminSessionsListQuery(
|
||||
)
|
||||
const sessions = computed(() => sessionsResponse.value?.data ?? [])
|
||||
|
||||
const attachedFilters = computed(() => ({}))
|
||||
const attachedPagination = ref({ page: 1, perPage: 200 })
|
||||
const { data: attachedResponse } = useAdminCourseSessionsQuery(
|
||||
courseId,
|
||||
attachedFilters,
|
||||
attachedPagination,
|
||||
{ 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
|
||||
if (!t) return '—'
|
||||
@@ -145,18 +123,20 @@ const onSearchInput = useDebounce(() => {
|
||||
|
||||
const pendingId = ref(null)
|
||||
|
||||
const attachMutation = useAttachAdminCourseSessionMutation()
|
||||
const detachMutation = useDetachAdminCourseSessionMutation()
|
||||
const updateSessionMutation = useUpdateAdminSessionMutation()
|
||||
|
||||
const invalidate = () => queryClient.invalidateQueries({ queryKey: adminCoursesKeys.all })
|
||||
const invalidate = () => {
|
||||
queryClient.invalidateQueries({ queryKey: adminCoursesKeys.all })
|
||||
queryClient.invalidateQueries({ queryKey: adminSessionsKeys.all })
|
||||
}
|
||||
|
||||
const onAttach = async (session) => {
|
||||
if (!courseId.value) return
|
||||
pendingId.value = session.id
|
||||
try {
|
||||
await attachMutation.mutateAsync({
|
||||
courseId: courseId.value,
|
||||
payload: { sessionIds: [session.id] },
|
||||
await updateSessionMutation.mutateAsync({
|
||||
id: session.id,
|
||||
payload: { courseId: courseId.value },
|
||||
})
|
||||
invalidate()
|
||||
} finally {
|
||||
@@ -164,17 +144,6 @@ const onAttach = async (session) => {
|
||||
}
|
||||
}
|
||||
|
||||
const onDetach = async (session) => {
|
||||
if (!courseId.value) return
|
||||
pendingId.value = session.id
|
||||
try {
|
||||
await detachMutation.mutateAsync({ courseId: courseId.value, sessionId: session.id })
|
||||
invalidate()
|
||||
} finally {
|
||||
pendingId.value = null
|
||||
}
|
||||
}
|
||||
|
||||
watch(courseId, () => {
|
||||
searchInput.value = ''
|
||||
searchQuery.value = ''
|
||||
|
||||
Reference in New Issue
Block a user