142 lines
4.2 KiB
JavaScript
142 lines
4.2 KiB
JavaScript
import { cleanFilters } from '@/utils/clean-filters'
|
|
import { useMutation, useQuery } from '@tanstack/vue-query'
|
|
import {
|
|
apiAddAdminTerm,
|
|
apiAddAdminTermCourses,
|
|
apiAddAdminTermStudents,
|
|
apiCloneAdminTerm,
|
|
apiDeleteAdminTerm,
|
|
apiGetAdminTerms,
|
|
apiGetAdminTermCourses,
|
|
apiGetAdminTermStudents,
|
|
apiGetTermAttendees,
|
|
apiRemoveAdminTermCourse,
|
|
apiRemoveAdminTermStudent,
|
|
apiShowAdminTerm,
|
|
apiToggleAdminTermStudentLeave,
|
|
apiUpdateAdminTerm,
|
|
} from '@/services/api/admin-terms'
|
|
|
|
export const adminTermsKeys = {
|
|
all: ['admin', 'terms'],
|
|
list: (filters, pagination) => ['admin', 'terms', 'list', filters, pagination],
|
|
detail: (id) => ['admin', 'terms', 'detail', id],
|
|
students: (termId, filters, pagination) => [
|
|
'admin',
|
|
'terms',
|
|
'students',
|
|
termId,
|
|
filters,
|
|
pagination,
|
|
],
|
|
attendees: (termId, filters, pagination) => [
|
|
'terms',
|
|
'attendees',
|
|
termId,
|
|
filters,
|
|
pagination,
|
|
],
|
|
courses: (termId, filters, pagination) => [
|
|
'admin',
|
|
'terms',
|
|
'courses',
|
|
termId,
|
|
filters,
|
|
pagination,
|
|
],
|
|
}
|
|
|
|
export const useAdminTermsListQuery = (filtersRef, paginationRef, options = {}) =>
|
|
useQuery({
|
|
queryKey: ['admin', 'terms', 'list', filtersRef, paginationRef],
|
|
queryFn: () => apiGetAdminTerms({ ...cleanFilters(filtersRef.value), ...paginationRef.value }),
|
|
select: (response) => ({
|
|
data: response?.data?.items ?? response?.data ?? [],
|
|
meta: response?.data?.meta ?? response?.meta,
|
|
}),
|
|
...options,
|
|
})
|
|
|
|
export const useAdminTermQuery = (idRef, options = {}) =>
|
|
useQuery({
|
|
queryKey: ['admin', 'terms', 'detail', idRef],
|
|
queryFn: () => apiShowAdminTerm(idRef.value),
|
|
select: (response) => response?.data ?? response,
|
|
...options,
|
|
})
|
|
|
|
export const useAddAdminTermMutation = () =>
|
|
useMutation({ mutationFn: (payload) => apiAddAdminTerm(payload) })
|
|
|
|
export const useUpdateAdminTermMutation = () =>
|
|
useMutation({ mutationFn: ({ id, payload }) => apiUpdateAdminTerm(id, payload) })
|
|
|
|
export const useDeleteAdminTermMutation = () =>
|
|
useMutation({ mutationFn: (id) => apiDeleteAdminTerm(id) })
|
|
|
|
export const useCloneAdminTermMutation = () =>
|
|
useMutation({ mutationFn: (id) => apiCloneAdminTerm(id) })
|
|
|
|
export const useAdminTermStudentsQuery = (termIdRef, filtersRef, paginationRef, options = {}) =>
|
|
useQuery({
|
|
queryKey: ['admin', 'terms', 'students', termIdRef, filtersRef, paginationRef],
|
|
queryFn: () =>
|
|
apiGetAdminTermStudents(termIdRef.value, {
|
|
...cleanFilters(filtersRef.value),
|
|
...paginationRef.value,
|
|
}),
|
|
...options,
|
|
})
|
|
|
|
export const useTermAttendeesQuery = (termIdRef, filtersRef, paginationRef, options = {}) =>
|
|
useQuery({
|
|
queryKey: ['terms', 'attendees', termIdRef, filtersRef, paginationRef],
|
|
queryFn: () =>
|
|
apiGetTermAttendees(termIdRef.value, {
|
|
...cleanFilters(filtersRef?.value || {}),
|
|
...paginationRef?.value,
|
|
}),
|
|
select: (response) => ({
|
|
data: response?.data?.items ?? response?.data ?? [],
|
|
meta: response?.data?.meta ?? response?.meta,
|
|
}),
|
|
...options,
|
|
})
|
|
|
|
export const useAddAdminTermStudentsMutation = () =>
|
|
useMutation({
|
|
mutationFn: ({ termId, payload }) => apiAddAdminTermStudents(termId, payload),
|
|
})
|
|
|
|
export const useRemoveAdminTermStudentMutation = () =>
|
|
useMutation({
|
|
mutationFn: ({ termId, userId }) => apiRemoveAdminTermStudent(termId, userId),
|
|
})
|
|
|
|
export const useToggleAdminTermStudentLeaveMutation = () =>
|
|
useMutation({
|
|
mutationFn: ({ termId, userId, payload }) =>
|
|
apiToggleAdminTermStudentLeave(termId, userId, payload),
|
|
})
|
|
|
|
export const useAdminTermCoursesQuery = (termIdRef, filtersRef, paginationRef, options = {}) =>
|
|
useQuery({
|
|
queryKey: ['admin', 'terms', 'courses', termIdRef, filtersRef, paginationRef],
|
|
queryFn: () =>
|
|
apiGetAdminTermCourses(termIdRef.value, {
|
|
...cleanFilters(filtersRef?.value || {}),
|
|
...paginationRef?.value,
|
|
}),
|
|
...options,
|
|
})
|
|
|
|
export const useAddAdminTermCoursesMutation = () =>
|
|
useMutation({
|
|
mutationFn: ({ termId, payload }) => apiAddAdminTermCourses(termId, payload),
|
|
})
|
|
|
|
export const useRemoveAdminTermCourseMutation = () =>
|
|
useMutation({
|
|
mutationFn: ({ termId, courseId }) => apiRemoveAdminTermCourse(termId, courseId),
|
|
})
|