import { Button, ButtonGroup, IconButton, Link, Menu, MenuButton, MenuItem, MenuList, useDisclosure, useToast, } from '@chakra-ui/react'; import { UseMutationResult, useMutation, useQueryClient, } from '@tanstack/react-query'; import { __ } from '@wordpress/i18n'; import React, { useState } from 'react'; import { BiDotsVerticalRounded, BiShow } from 'react-icons/bi'; import ActionDialog from '../../../../../assets/js/back-end/components/common/ActionDialog'; import { CustomIcon } from '../../../../../assets/js/back-end/components/common/CustomIcon'; import { Trash } from '../../../../../assets/js/back-end/constants/images'; import urls from '../../../../../assets/js/back-end/constants/urls'; import API from '../../../../../assets/js/back-end/utils/api'; import googleClassroomUrls from '../../../constants/urls'; import { googleClassroomCourses, newData } from '../GoogleClassroom'; interface GoogleClassroomUpdateCourse { id: string; google_classroom_course_id: string; name: string; google_course_url: string; google_classroom_enrollment_code: string; description: string; status: string; } type updateCourse = googleClassroomCourses; function Buttons(props: { course: updateCourse; onImportClick: (data: any) => void; addCourse: UseMutationResult; courseKey: string; studentImportOnClick: (data: any) => void; }) { const { course, onImportClick, addCourse, courseKey, studentImportOnClick } = props; const toast = useToast(); const courseAPI = new API(urls.courses); const queryClient = useQueryClient(); let courseId = Number(course.course_id) as number; const { onClose, onOpen, isOpen } = useDisclosure(); const [deleteCourseId, setDeleteCourseId] = useState( courseId, ); const googleClassroomCoursesApi = new API( googleClassroomUrls.googleClassroom, ); const updateCourse = useMutation({ mutationFn: (data: any) => courseAPI.update(courseId, data), ...{ onSuccess: (data: any) => { toast({ title: __('Course Updated', 'learning-management-system'), status: 'success', isClosable: true, }); queryClient.invalidateQueries({ queryKey: [`googleClassroomCourseList`], }); }, onError: (err: any) => { toast({ title: err?.message || __('Something went wrong', 'learning-management-system'), status: 'error', isClosable: true, }); }, }, }); const updateNPublishCourse = (data: googleClassroomCourses) => { const newData: any = { google_classroom_course_id: data.id, name: data.name, google_course_url: data.alternateLink, google_classroom_enrollment_code: data.enrollmentCode, description: data.descriptionHeading, status: 'publish', }; updateCourse.mutate(newData); }; const deleteCourse = useMutation({ mutationFn: (id: number) => courseAPI.delete(id, { force: true, children: true }), ...{ onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['googleClassroomCourseList'], }); toast({ title: __('Course Deleted', 'learning-management-system'), isClosable: true, status: 'success', }); }, onError: (err: any) => { toast({ title: err?.message || __('Something went wrong', 'learning-management-system'), status: 'error', isClosable: true, }); }, }, }); const onDeletePress = (courseId?: number) => { onOpen(); setDeleteCourseId(courseId); }; const onDeleteConfirm = () => { deleteCourseId ? deleteCourse.mutate(deleteCourseId) : null; }; return ( <> {course.course_id && ( <> {course.course_status === 'draft' && ( )} {course.course_status === 'publish' && ( )} {course.course_id && ( } variant="outline" rounded="sm" fontSize="large" size="xs" /> <> {course.course_status === 'publish' && ( <> } onClick={() => updateNPublishCourse(course)} > {__('Update Course', 'learning-management-system')} } onClick={() => studentImportOnClick(course)} > {__('Student Import', 'learning-management-system')} )} }> {__('Preview', 'learning-management-system')} onDeletePress(courseId)} icon={} _hover={{ color: 'red.500' }} > {__('Delete Permanently', 'learning-management-system')} )} onDeleteConfirm()} isLoading={deleteCourse.isPending} dialogTexts={{ default: { header: __('Deleting course', 'learning-management-system'), body: __( 'Are you sure? You can’t restore after deleting.', 'learning-management-system', ), confirm: __('Delete', 'learning-management-system'), }, delete: { header: __('Deleting Courses', 'learning-management-system'), body: __('Are you sure? You can’t restore after deleting.'), confirm: __('Delete', 'learning-management-system'), }, }} /> )} ); } export default Buttons;