46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
import React from "react";
|
|
import axios from "axios";
|
|
import { toast } from "react-toastify";
|
|
import { BsArchive } from "react-icons/bs";
|
|
|
|
export const useAssignmentArchive = (
|
|
assignmentId: string,
|
|
reload?: Function
|
|
) => {
|
|
const [loading, setLoading] = React.useState(false);
|
|
const archive = () => {
|
|
// archive assignment
|
|
setLoading(true);
|
|
axios
|
|
.post(`/api/assignments/${assignmentId}/archive`)
|
|
.then((res) => {
|
|
toast.success("Assignment archived!");
|
|
if(reload) reload();
|
|
setLoading(false);
|
|
})
|
|
.catch((err) => {
|
|
toast.error("Failed to archive the assignment!");
|
|
setLoading(false);
|
|
});
|
|
};
|
|
|
|
const renderIcon = (downloadClasses: string, loadingClasses: string) => {
|
|
if (loading) {
|
|
return (
|
|
<span className={`${loadingClasses} loading loading-infinity w-6`} />
|
|
);
|
|
}
|
|
return (
|
|
<BsArchive
|
|
className={`${downloadClasses} text-2xl cursor-pointer`}
|
|
onClick={(e) => {
|
|
e.stopPropagation();
|
|
archive();
|
|
}}
|
|
/>
|
|
);
|
|
};
|
|
|
|
return renderIcon;
|
|
};
|